上面介绍完原理,下面就是如何实现功能了,
我们直接来看程序,
声明一下我们是用原子的例程移植的。
这里我们依然使用是STM32的HAL库,
没办法,用熟了,顺手,而且各种以前的资源不能浪费了不是。
首先是时钟配置,这个没什么好说的,能跑多快就多快吧。
就跟没人会希望自己媳妇丑一样。
(哦,不好意思这段是之前用寄存器写的,拿过来用了,见谅)
下面是今天的主角,DMA+PWM的配置方式。
先配置下GPIO吧,我们使用的是TIM2的CH1通道,
对用的PWM输出引脚是PA0,注意要用复用输出功能哦。
下面是TIM2+CH1通道的配置,注意要配置成800KHz的频率,
内核时钟72M / 90 = 800KHz,应该不难理解吧。
然后是CH1输出通道的,配置成PWM1输出模式即可,
注意电平的极性,不放心的可以用示波器抓抓波形。
然后就是我们的DMA得配置了,要设置好数组地址跟寄存器地址
然后就是DMA传输的字节长度,传输模式等等了
有关寄存器地址大家应该会找吧,不会的看下边,
先从Datasheet找到我们的存储器映像图表,找到TIM寄存器租的起始地址,
可以看到TIM2寄存器组的起始地址是0x40000000,
然后找到Reference Manual里,我们需要使用的TIM2_CCR1寄存器,
可以看到CCR1的偏移地址是0x34,所以我们需要的寄存器地址就是,
0x40000000 + 0x34 = 0x40000034,不懂得童鞋回去好好啃啃计算机原理吧,
需要的外设资源配置好了,接下来就是万事俱备只欠东风了,
下面就是我们有关LLED控制信号的处理函数了,
look,不多解释。
上图最后面那个bug,是之前原子的程序就带着的,
家里没有示波器目前没做验证,有空会控死抓抓波形看看。
程序能用,也就没深究下去。
注意一下,到这可没玩呢,说好了要用DMA方式传输数据的,
下面才是数据传输的主要内容呢。
本帖最后由 通宵敲代码 于 2018-5-6 23:28 编辑