目录

配置的选择思路

实现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的配置

cubeMX配置RTC_嵌入式硬件

 

cubeMX配置RTC_单片机_02

当然你也可以按照你的思路来进行配置,这里只是我的一个配置过程。(*^▽^*) 

定时器的配置

cubeMX配置RTC_cubeMX配置RTC_03

DMA的配置

可以看到使用CubeMX配置真的是相当舒服啊,哐哐两下就把代码写完了^_^

MDK仿真配置 

由于我的开发板不在身边,无法对自己的想法进行验证。该这么办呢?嘿嘿嘿。MDK提供了强大的仿真功能,这样无需开发板也能验证我们的想法了呢。

Debug页面配置

cubeMX配置RTC_嵌入式硬件_04

 其实也很简单,吧以上的选项勾进去就可以了。

DARMSTM.DLL和TARMSTM.DLL

一点简单的代码编写

如果我们是要实现可调的PWM波我们就要不断给定时器传入对比值,这样才能够实现可调的PWM。

废话不多说 直接定义一个数组

cubeMX配置RTC_cubeMX配置RTC_05

然后启动函数

cubeMX配置RTC_开发板_06

 

完成了上面这些操作,那么恭喜你马上要来到令人激动的波形查看了 O(∩_∩)O

cubeMX配置RTC_stm32_07

 首先进入debug界面 进行如上配置

然后新建一个波形

cubeMX配置RTC_cubeMX配置RTC_08

你可以像我一样配置

cubeMX配置RTC_嵌入式硬件_09

 

结果展示

cubeMX配置RTC_cubeMX配置RTC_10

 嘿嘿嘿 如果学会了就点个赞吧 ^_^