Rthread+Cubemx快速构建工程
首先下载并安装如下两个软件
RT_Thread下载链接:https://www.rt-thread.org/page/studio.html
CubeMX下载链接:https://www.st.com/en/embedded-software/stm32cubeg0.html#get-software
<------------------------------------------------------------------------------------------------------------------------------------->
点击新建工程:

选择自己芯片类型建立相应的工程,根据自己开发板上的usb转串口选择控制台串口(这里使用的是stm32f103vex)

三个按钮分别是:1、构建 2、串口终端 3、下载

将文件构建好并下载到开发板后可以看见实例程序正在运行

现在我们进一步向工程中添加pwm驱动并结合cubemx设置相应的底层初始化。
选择如下选项即可在rtthread中使能pwm

点击如下按钮打开cubemx(必须先安装cubemx)

首先打开外部时钟并配置时钟树(时钟树的配置建议查看相应的数据手册)


配置pwm初始化和uart1初始化 一切设置好了后直接关闭cubemx相应的文件会自动加载到工程中(这里使用的pwm3 channel4)


板上资源都可以通过board.h文件来设置,并且官方为每个外设都写了简易的教程,跟着相应的步骤即可配置完成,此处step1已经在之前完成
step3,step4由cubemx完成,因此只需完成step2

完成相应的设置后在main中添加如下代码即可完成pwm的输出
#include <rtthread.h>
#include <rtdevice.h>
#include <board.c>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#define LED0 GET_PIN(B,1)
#include <rtdbg.h>
#define PWM_DEV_NAME "pwm3" /* PWM设备名称 */
#define PWM_DEV_CHANNEL 4 /* PWM通道 */
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
int main(void)
{
rt_uint32_t period, pulse, dir;
period = 500000; /* 周期为0.5ms,单位为纳秒ns */
dir = 1; /* PWM脉冲宽度值的增减方向 */
pulse = 0; /* PWM脉冲宽度值,单位为纳秒ns */
/* 查找设备 */
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);
return RT_ERROR;
}
/* 设置PWM周期和脉冲宽度默认值 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/* 使能设备 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
while (1)
{
rt_thread_mdelay(50);
if (dir)
{
pulse += 5000; /* 从0值开始每次增加5000ns */
}
else
{
pulse -= 5000; /* 从最大值开始每次减少5000ns */
}
if (pulse >= period)
{
dir = 0;
}
if (0 == pulse)
{
dir = 1;
}
/* 设置PWM周期和脉冲宽度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}
如需更多关于pwm的资料请转到rtthreat官方网站https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/device/pwm/pwm

浙公网安备 33010602011771号