推荐阅读最新更新时间:2024-03-16 14:57
STM32 EXTI中断设置五步曲
首依实际系统选择需要多少个中断优先级即 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 然后按下列5步 1 AFIO及GPIO时钟设置 2 要中断的脚设为IN_PU或浮空输入 3 绑定exti中断引脚如 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); 4 配置边沿触发 即设置 EXTI_InitTypeDef EXTI_InitStructure; 5 配置中断向量 即设置 NVIC_InitTypeDef NVIC_InitStructure; 另外 不要忘了在中断程序中补充相应的中断函数
[单片机]
STM32 DMA->内存到内存
基于STM32 F401 Discovery板: DMA2在AHB1总线上 步骤一:使能DMA #define DMA_STREAM_CLOCK RCC_AHB1Periph_DMA2 RCC_AHB1PeriphClockCmd(DMA_STREAM_CLOCK, ENABLE); 步骤二:reset DMA Stream register: /* Reset DMA Stream registers (for debug purpose) */ DMA_DeInit(DMA_STREAM); 步骤三: /* Check if the DMA Stream is disab
[单片机]
基于stm32处理器的PWM 异步驱动蜂鸣器
这两天应工作需求研究了一下M3处理器的PWM(脉宽调制)实现对蜂鸣器的异步控制。鉴于阻塞式对蜂鸣器的控制比较耗时,影响用户体验,因此对原有阻塞式控制方案进行了改善,提出了异步控制蜂鸣器的实现方法。以下主要对实现中需要注意的重点知识以及所遇到的问题进行了讨论。 PWM波利用M3的定时器产生,出于对平台资源的有效利用,选择定时器1用来输出脉宽调制信号。这就引出了本文的重点,M3定时器的应用。 M3的定时器资源一共有11个,其中两个高级定时器(Timer1和Timer8)、4个通用定时器(Timer2-Timer5)、2个普通定时器(Timer6-Timer7)、2个看门狗定时器以及一个SysTick定时器。相对于普通定时器来说,高
[单片机]
关于使用STM32 SPI3的一些总结
总结一下spi3的问题,因为spi3的nss口与JTAG有共用引脚,所以配置错误会导致SPI3无法使用。需要注意以下三点就可以了: 1.将PA15配置为普通IO口,GPIO_Mode_Out_PP 2.开启AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 3.关闭JTAG功能,使能SWD GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE) ; 其他的SPI口正常配置,因为板子重启后默认为JTAG模式,虽然在调试时使用了SWD,但PA15依然不是普通的IO口,当把它重新配置时,一定要开启AFIO时钟,
[单片机]
STM32的位操作的方法
STM32 之位带操作 Cortex-M3 支持了位操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。 在 CM3 支持的位带中,有两个区中实现了位带。 其中一个是 SRAM 区的最低 1MB 范围, 0x20000000 ‐ 0x200FFFFF(SRAM 区中的最低 1MB); 第二个则是片内外设区的最低 1MB范围, 0x40000000 ‐ 0x400FFFFF(片上外设区中的最低 1MB)。 这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 C
[单片机]
stm32专题三十:12864 IIC驱动
1 IIC发送数据 / 命令时序 2 12864 图形显示(显存) RAM的大小是128×64位,RAM分为8页,从PAGE0到PAGE7,用于单色128x64点阵显示。 3 行列设置 1 设置起始行坐标(设置页) 命令 0XB0 ~ 0XB7 用于设置分页,所以我们显示的分页要 + 偏移(0XB0) 2 设置起始列坐标 4 制作字模 1 字模软件设置方式: 2 生成的字模的批处理: 生成的字模如图所示,我们要转成 0X00 这种格式: 使用 sublime 这个软件,可以进行批处理(先全选,然后再 快捷键 Ctrl + Shift + L): 字模生成完毕。 驱动程序如下所示
[单片机]
STM32 堆栈大小详解 以及变量存储位置
栈增长和大端/小端问题是和CPU相关的两个问题. 1,首先来看:栈(STACK)的问题. 函数的局部变量,都是存放在 栈 里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以 战舰 stm32 开发板 为例,在startup_stm32f10x_hd.s里面,开头就有: Stack_Size EQU 0x00000800 表示栈大小是0X800,也就是2048字节.这样,CPU处理任务的时候,函数局部变量做多可占用的大小就是:2048字节,注意:是所有在处理的函数,包括函数嵌套,递归,等等,都是从这个 栈 里面,来分配的. 所以,如果一个函数的局部变量过多,比如在函数里面定义一个u8
[单片机]