STM32移植RT-Thread实现PWM波的输出

在进行PWM波的学习中,依然是踩了小坑,网络上大部分配置都增加了TIM的配置,貌似是不需要的,当开启了TIM的时钟反而影响了PWM的时钟,暂且归咎于版本不一样?还是STM32F1和STM32F4不一样呢?核心问题还是,按部就班完成几样配置,最后翻看一下时钟是否有效开启即可。

1.打开RT-Thread Setting中PWM的驱动

在这里插入图片描述

2.进行HAL库的配置

HAL库的配置必须要做的 SYS/RCC/USART 然后在配置个TIM的PWM输出
在这里插入图片描述
这里的Clock Source并没有开启,因为开启后发现stm32f1xx_hal_msp.c中只有HAL_TIM_MspInit而没有HAL_TIM_PWM_MspInit,感觉很奇怪,不知道F4或者其他芯片什么样,网络上里面有开启的有没开启的,我觉得可能是实时操作系统版本的问题,大家可以关注一下时钟是否开启了。

3.开启board.h里面的宏定义

在这里插入图片描述
HAL库中配置的哪个就在这里开启哪个

4.打开stm32f1xx_hal_conf_bak.h的PWM的宏定义

在这里插入图片描述

5.代码

#include <rtthread.h>
#include <rtdevice.h>
#include <rtdbg.h>
#include "stm32f1xx_hal.h"
#include "main.h"



#define PWM_DEV_NAME        "pwm2"  //PWM设备名称
#define PWM_DEV_CHANNEL     1       //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 = 250000;          //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)
    {

    };
}

最后

RTT基本所有外设配置都是差不多的,按部就班配置即可,PWM这里遇到的问题就是,开启了Clock Source后,打开的时钟只是TIM的而没有PWM的,暂时归咎于版本问题吧,或者我们可以调用HAL库的初始化,这样是不是手动开启了时钟呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值