目录
配置的选择思路
实现PWM波的方法
方法一(使用普通IO口)
方法二(使用定时器)
优劣比较
为什么使用DMA
DMA优点
配合函数
具体配置操作
CubeMX生成代码
时钟RCC的配置
定时器的配置
DMA的配置
编辑
MDK仿真配置
Debug页面配置
一点简单的代码编写
结果展示
配置的选择思路
实现PWM波的方法
方法一(使用普通IO口)
单片机初学者可能第一种想到如何输出PWM的方法就是直接拉高拉低电平进行配置
方法二(使用定时器)
稍微有使用定时器的同学,想到配置PWM可能就会想到这个方法
优劣比较
显然两种方法都可以得到我们想要的PWM波形,但是第一种显然更加地浪费CPU的资源,因为在使用延时的时候,单片机啥也干不了只能在那干等着,所以说最好还是采用定时器的方法。
为什么使用DMA
DMA优点
直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。
配合函数
同样的我们使用DMA也是为了节省单片机的资源,使得我们可以做更多的其他操作。但这里我们使用DMA配置PWM也是为了能够使用ST给我们提供的HAL库函数HAL_TIM_PWM_Start_DMA,这个函数非常方便帮助我们实现了PWM可调的波形
具体配置操作
CubeMX生成代码
最近开始使用CubeMX这个软件,发现这个软件实在是太好用了,极大地方便了开发者进行开发(#^.^#)。
时钟RCC的配置
当然你也可以按照你的思路来进行配置,这里只是我的一个配置过程。(*^▽^*)
定时器的配置
DMA的配置
可以看到使用CubeMX配置真的是相当舒服啊,哐哐两下就把代码写完了^_^
MDK仿真配置
由于我的开发板不在身边,无法对自己的想法进行验证。该这么办呢?嘿嘿嘿。MDK提供了强大的仿真功能,这样无需开发板也能验证我们的想法了呢。
Debug页面配置
其实也很简单,吧以上的选项勾进去就可以了。
DARMSTM.DLL和TARMSTM.DLL
一点简单的代码编写
如果我们是要实现可调的PWM波我们就要不断给定时器传入对比值,这样才能够实现可调的PWM。
废话不多说 直接定义一个数组
然后启动函数
完成了上面这些操作,那么恭喜你马上要来到令人激动的波形查看了 O(∩_∩)O
首先进入debug界面 进行如上配置
然后新建一个波形
你可以像我一样配置
结果展示
嘿嘿嘿 如果学会了就点个赞吧 ^_^