RT-thread Studio 输出PWM(基于STM32F1系列)

1.首先在RT-thread Settings中打开PWM

RT-thread Studio 输出PWM(基于STM32F1系列)_第1张图片

然后点这个保存全部。(这个时候编译整个文件会报很多错)RT-thread Studio 输出PWM(基于STM32F1系列)_第2张图片

2.打开Divers文件夹下的board.h文件

RT-thread Studio 输出PWM(基于STM32F1系列)_第3张图片 定义如上的两个。由于我开启的是定时器2的通道一(引脚是PA0),所以我定义了

#define BSP_USING_PWM2
#define BSP_USING_PWM2_CH1

3.打开位于dirvers文件夹下的stm32f1xx_hal_conf.h文件。

RT-thread Studio 输出PWM(基于STM32F1系列)_第4张图片

 如图,把红圈部分的注释去掉。

RT-thread Studio 输出PWM(基于STM32F1系列)_第5张图片

 可以看到,在宏定义了HAL_TIM_MODULE_ENABED后,包含了头文件tim.h。

4.打开stm32CubeMX软件,根据芯片新建工程。(我这里选择的是stm32f103c8t6)

RT-thread Studio 输出PWM(基于STM32F1系列)_第6张图片

 开启外部高速时钟。

RT-thread Studio 输出PWM(基于STM32F1系列)_第7张图片

 按自己需求配置TIMX。右侧将Clock Source设置为内部时钟,通道按自己需求,设置为PWM Generation CHX。

紧接着在下方

RT-thread Studio 输出PWM(基于STM32F1系列)_第8张图片

 pwm波的频率=系统时钟频率/(arr+1)/(psc+1),UP即为向上计数。其实这三个参数配置没有什么讲究,按图中即可。如果系统时钟频率为72MHZ的话,那么该PWM波的一个周期为0.5毫秒。

紧接着滑动到最下方

RT-thread Studio 输出PWM(基于STM32F1系列)_第9张图片

 模式为1即可,表示向上计数时,低于比较值的部分输出有效电平

Pulse先设置为0。它可以理解为有效电平的宽度。它的范围为0到周期。

第三行第四行按默认即可。

第五行就是用来设置有效电平的。LOW即低电平为有效电平

5.系统时钟配置

RT-thread Studio 输出PWM(基于STM32F1系列)_第10张图片

 这里并不一定要按图中配置。图中是利于外部时钟开启PLL时钟。

接下来

RT-thread Studio 输出PWM(基于STM32F1系列)_第11张图片

 第一行:自己起名。

第二行:自己选择生成的工程的位置

第三行(红线部分):选择工具。我用的是keil5,所以选择MDK-ARM V5。

接下来:

RT-thread Studio 输出PWM(基于STM32F1系列)_第12张图片

 红线部分打√后点右上角生成代码。

打开生成好的工程。

RT-thread Studio 输出PWM(基于STM32F1系列)_第13张图片

 先行编译一遍。然后

RT-thread Studio 输出PWM(基于STM32F1系列)_第14张图片

打开tim.c。RT-thread Studio 输出PWM(基于STM32F1系列)_第15张图片

 将上述代码粘贴到rt-thread studio中的 board.c下。

 RT-thread Studio 输出PWM(基于STM32F1系列)_第16张图片

 同样粘贴这一段代码到board.c下。粘贴完后将函数名中的Base改为PWM。

效果如下:

RT-thread Studio 输出PWM(基于STM32F1系列)_第17张图片

 。。。。。

RT-thread Studio 输出PWM(基于STM32F1系列)_第18张图片

 在rt-thread studio中的pwm.c文件中给出了pwm的初始化函数。但是我们已经用CubeMX初始化好pwm了,用它的函数还得再配置一遍,所以我们直接将CubeMX中的MX_TIM2_Init函数拷贝过来吧。之后可以进入这个函数来修改psc,arr,有效电平等的值。更正一下,这里的MX_TIM2_Init不需要拷贝过来。rt-thread做的优秀很多,如果我们想改周期也不需要操作底层修改arr,psc等值。)

RT-thread Studio 输出PWM(基于STM32F1系列)_第19张图片

函数位于tim.c中,将其复制到rt-thread studio的main.c中(位于int main函数之后)。

RT-thread Studio 输出PWM(基于STM32F1系列)_第20张图片

在int main前加上这三句。(一个月后更正:一二句多余,MX_TIM2_Init多余)

6.最后一步,来到int main中

先加入MX_TIM2_Init();

 “pwm2”因为我开启的是TIM2的1通道。划红线的1就是指通道1.画蓝线的499就是arr了。化黄线的0就是有效电平宽度了,修改这个值来输出不同占空比的pwm波。

(更正:画蓝线的是周期。周期是有一个公式的,它的值依赖psc,arr等的值。但这里呢,我们想让周期为多少就在蓝线部分填多少就可以了,rt-thread会自动将周期值配置成你想让的。周期以纳秒为单位,例如可以填为500000,就代表周期是500000纳秒,即0.5毫秒。当然也有可能你设置的周期过于大了,那么rt-thread会将周期配置成最大值。再说呢,其实pwm最重要的是占空比,周期设置多少无所谓,填500000就行)

按上图配置的话,PA0就会一直输出高电平。(因为低电平为有效电平,可有效电平的宽度为0,所以就会输出高电平了)。

至此就大功告成了!

你可能感兴趣的:(stm32,单片机,嵌入式硬件)