# 关于STM32F4 使用DMA数据流-冲突下-复用输出PWM操作问题的记录以及解决办法
1 前言
——之前,一直在测试并使用DMA+PWA点ws2812灯带,当时提供的是F4的一款芯片,提供引脚是PA0,PA1,PA2,PA3,PA6,PA7这6个引脚,并且指定定时器tim2和tim3。 ——在调试过程中,发现他们DMA上有冲突,在"STM32F4中文参考手册",如下图,可以看到TIM2_ch1和TIM3_ch2都在数据5上,他们是冲突的。 ——后来解决了,采用时间片轮转方式,虽然成功了,但是不是很推荐这种方式,本次也是做个记录,这个问题可以完结了。
2 问题
——当时也专门花钱发了一个问题帖子,想要解决,具体问题如下。 https://ask.csdn.net/questions/7617833
3 测试环境
软件环境:STM32cubeIDE 1.8.0 硬件芯片:STM32F407ZGT6
4 代码配置
-
时钟以及调试口配置。 基础配置,在这个软件上这样配置就行 -
定时器TIM2,TIM3配置端口以及细节 (1)这块会多说些,我们需要先看看PA0,PA1,PA2,PA3,PA6,PA7这6个引脚上都有哪些可用tim2和tim3DMA通道。本身测试只使用了 PA0,PA2,PA6和PA7。 注意: 1——为什么不使用PA1呢,因为在使用正点原子开发板,这个引脚有外部器件干扰,用不了。 2——为什么不使用PA3呢,记得是因为tim2ch2和tim2ch4公用一个端口上,所以自然而然少一个可以上上边DMA1映射请求图。 (2)在软件STM32cubeIDE上查看引脚可用。
PA0引脚如下图:
PA2引脚如下图:
PA6引脚如下图:
PA7引脚如下图: (3)具体配置细节 配置定时器2的ch1和ch3,如下图, 配置时钟参数 配置定时器3的ch1和ch2,如下图,可用看到定时TIM3_CH2标为红色,说明软件本身不让你选。
先选择TIM3_CH4/UP并且配置,如下图。 另外别忘记配置定期器。
- 系统时钟配置
F4配置系统时钟为168M 以上配置,如果有什么觉得不详细地方,下载代码来对比,链接请看下边链接。
5 使用的样例代码链接
https://download.csdn.net/download/qq_22146161/82348158
6 代码片段说明
在代码段需要注意一些细节。 (1)在main.c中要,要注意初始化时,注释掉定时3初始化,时间片轮转的思想,在定时器2输出后,先失能tim2,再初始化tim3,输出tim3的,等输出完tim3,先失能tim3,再初始化tim2,如此反复。 (2)tim3_ch4配置代码手动配置到tim3_ch2:我们之前配置的时候,无法再软件内选择,只能自己手动改下代码,需要修改定时器3初始化,和DMA配置函数,在stm32f4xx_hal.msp.c内。
(3)另外在中断函数配置相关代码,stm32f4xx_it.c 具体,有需要请看代码片段吧。这里也就不一一列出了。
7 后期验证
一个东西是否有些,就要用时间硬件抓下,使用逻辑分析仪抓出波形如下图。 具体数据细节 可以看出4个通道都可以输出波形。
8 总结
这件事也就完结了,也花了不少精力调试与测试。
|