【国民技术N32G457评测】rt_thread studio PWM配置
<p>RT_Thread Studio 默认给出了TIM3的配置,但是我需要用板载的LED灯实现呼吸灯的效果,所以要自己配置PWM1。LED3灯为PA8,从手册中查到它为TIM1——CH1.</p><p>1、在RT_Thread Settings中设置开启PWM。保存生成rt_drivers下面有drv_pwm.c与drv_pwm.h.</p>
<p>2、修改rtconfig.h,添加在TIM1的配置:即添加</p>
<p>#define BSP_USING_TIM1<br />
#define BSP_USING_TIM1_CH1</p>
<p></p>
<p>3、修改drv_pwm.h,增加编译条件:</p>
<p> 4、在drv_pmw.c中增加对tim1的结构体的条件编译配置:</p>
<p> </p>
<p> 5、书写测试程序:直接抄写官方例程,但是要注意修改几处地方。</p>
<pre>
<code>#include <rtthread.h>
#include <rtdevice.h>
#define LED_PIN_NUM 67 /* PA8 LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
#define PWM_DEV_NAME "tim1pwm1"/* PWM设备名称 */
#define PWM_DEV_CHANNEL 1 /* PWM通道 */
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
static int lu_pwm_led_sample(int argc, char *argv[])
{
rt_uint32_t period, pulse, dir;
period = 5000;
dir = 1; /* PWM脉冲宽度值的增减方向 */
pulse = 0; /* PWM脉冲宽度值 */
/* 设置LED引脚脚模式为输出 */
rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
/* 拉高LED引脚 */
rt_pin_write(LED_PIN_NUM, PIN_HIGH);
/* 查找设备 */
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(20);
if (dir)
{
pulse += 50; /* 从0值开始每次增加100 */
}
else
{
pulse -= 50; /* 从最大值开始每次减少100 */
}
if (pulse >= period)
{
dir = 0;
}
if (0 == pulse)
{
dir = 1;
}
/* 设置PWM周期和脉冲宽度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(lu_pwm_led_sample, pwm sample);</code></pre>
<p> 下载到开发板后实现呼吸灯的效果。</p>
<p>经验:1、RT_Thread Studio大部分可以由IDE实现大部分代码,但是国民技术与RT的配合还有待加强。这里只能自己配置TIM3。</p>
<p>2、对于基础知识还得加强学习,如果没有扎实的基础,遇到IDE不能配置好的时候,感觉无从下手。</p>
<p>抄写官方例程,修改的几个地方是那几行代码</p>
Jacktang 发表于 2022-2-11 07:26
抄写官方例程,修改的几个地方是那几行代码
<ul>
<li>#define LED_PIN_NUM 67 /* PA8 LED PIN脚编号,查看驱动文件drv_gpio.c确定 */</li>
<li>#define PWM_DEV_NAME "tim1pwm1" /* PWM设备名称 */</li>
<li>#define PWM_DEV_CHANNEL 1 /* PWM通道 */</li>
<li>period = 5000;</li>
<li>dir = 1; /* PWM脉冲宽度值的增减方向 */</li>
<li>pulse = 0; /* PWM脉冲宽度值 */</li>
<li>还有延时时间,加减脉宽量</li>
<li> </li>
</ul>
页:
[1]