1 可移植BSP外设综合驱动
- BSP外设驱动
- bsp.c
- bsp.h
2 驱动实验深入实践
2.1 按键检测(软件滤波,FIFO机制)
2.2 基于Systick滴答定时器的多组软件定时器实现
2.3 TCM,SRAM等五块内存的超方便使用方式(V1.1)
- MPU设置
- 主程序设计
- 结果
2.4 TCM,SRAM等五块内存的动态内存分配实现
2.5 DMAMUX的定时器触发+BDMA控制任意IO做PWM和脉冲数控制
当前STM32H7有两路DMAMUX,分别是DMAMUX1和DMAMUX2,其中DMAMUX1负责DMA1和 DMA2,而 DMAMUX2 负责 BDMA。DMAMUX1 有 16 个输出通道,前 8 个通道分别连接 DMA1 Stream0 到 Stream7,而后 8 个通道分别连接DMA2 Stream0到Stream7。下面DMAMUX1的前8路接到DMA1的8路数据流通道Stream0到Stream7 中。DMAMUX2 有 8 个输出通道,连接BDMA的8个输入通道对于 DMAMUX1 来说,这个接口支持 107 个 DMA 外设请求,供 DMA1 和 DMA2 的数据流使用:对于 DMAMUX2 来说,这个接口支持 9 个 DMA 外设请求,供 BDMA 通道使用DMAMUX1 支持 8 种触发输入,供 DMA1 和 DMA2 使用DMAMUX2 支持的 30 种触发输入,供 BDMA 使用- 使用半传输完成中断和传输完成中断实现的双缓冲效果跟 BDMA 本身支持的双缓冲模式实现的效果是一样的。只是最大传输个数只能达到 32767 次。
- 相比定时器本身支持的 PWM,这种方式更加灵活,可以让任意 IO 都可以输出 PWM,而且方便运行中动态修改输出状态。
- APB4 上面的 TIMxCLK 没有分频,所以就是 100MHz;
- APB1 定时器有 TIM2, TIM3 ,TIM4, TIM5, TIM6, TIM7, TIM12, TIM13, TIM14,LPTIM1
- APB2 定时器有 TIM1, TIM8 , TIM15, TIM16,TIM17
- APB4 定时器有 LPTIM2,LPTIM3,LPTIM4,LPTIM5
- 定时器触发+BDMA控制
- 主函数
- 结果
- 5MHZ
- 20KHZ
- 10MHZ(已失真)
2.6 DMAMUX的定时器触发+DMA双缓冲控制任意IO做PWM和脉冲数控制
当前STM32H7有两路DMAMUX,分别是DMAMUX1和DMAMUX2,其中DMAMUX1负责DMA1和 DMA2,而 DMAMUX2 负责 BDMA。DMAMUX1 有 16 个输出通道,前 8 个通道分别连接 DMA1 Stream0 到 Stream7,而后 8 个通道分别连接DMA2 Stream0到Stream7。下面DMAMUX1的前8路接到DMA1的8路数据流通道Stream0到Stream7 中。DMAMUX2 有 8 个输出通道,连接BDMA的8个输入通道对于 DMAMUX1 来说,这个接口支持 107 个 DMA 外设请求,供 DMA1 和 DMA2 的数据流使用:对于 DMAMUX2 来说,这个接口支持 9 个 DMA 外设请求,供 BDMA 通道使用DMAMUX1 支持 8 种触发输入,供 DMA1 和 DMA2 使用DMAMUX2 支持的 30 种触发输入,供 BDMA 使用- TIM12CLK = 200MHz/(Period + 1) / (Prescaler + 1),函数 bsp_InitTimDMA1 中 DMAMUX1 选择的是单边沿触发,每个时钟可以触发两次。
- uint32_t Period[2] = {1999, 19999};
- uint32_t Pulse[2] = {1000, 10000};
- 当选择第 1 组配置时
- TIM12CLK = 200MHz / (Period + 1) / (Prescaler + 1) = 200MHz/(1999+1) = 100KHz
- 占空比 = Pulse / (Period + 1) = 1000 / (1999+1)= 50%
- 当选择第 2 组配置时,
- TIM12CLK = 200MHz / (Period + 1) / (Prescaler + 1) = 200MHz/(19999+1) = 10KHz
- 占空比 = Pulse / (Period + 1) = 10000 /(19999+1)= 50%
- TIM12 的 TRGO 用于触发 DMAMUX 的请求发生器。
- DMAMUX的定时器触发
- DMA双缓冲控制
- 结果
- 50KHZ
- 5KHZ
2.7 ADC定时器触发+DMA双缓冲实现
- ADC 转换既可以选择外部触发也可以选择软件触发。定时器属于外部触发方式,使用定时器触发的好处是可以设置任何 ADC 能够支持的转换频率
- MPU
- ADC 触发设置
- ADC DMA 设置
- 中断
- 结果
2.8 ADC多通道过采样实现(最高可实现26位分辨率)
2.9 DAC定时器触发+DMA方式双通道同步输出
- 注意 STM32H7 只有一个 DAC,但有两个独立的通道,跟 F4 的略不同,F4 是两个 DAC
- 12 位分辨率,双通道,支持独立或者同时使用。两个 DAC 通道均支持 DMA。每路 DAC 输出均可与 DAC_OUTx 输出引脚断开连接,而且 DAC 输出可与片上外设连接。支持偏移校准,参考电压可以使用内部的 VREFBUF,也可以使用 VREF+引脚外接的电压基准。支持噪声波和三角波生成。这两种方案不够灵活,所以基本都采用定时器触发+DMA 方式生成任意波形。
- DAC 触发设置
- DAC DMA设置
- 结果(
注:因为PA4引脚接有电容,导致波形出现滤波),STM32H7 的 DAC 输出 100KHz 方波的效果比 F429 好不少,满幅输出,参考蓝色波形