RT-Thread的STM32系列外设驱动添加 ---- 以PWM外设为例

2019-07-19来源: eefocus关键字:RT-Thread  STM32系列  外设驱动  PWM外设

一、准备

官方教程:STM32系列外设驱动添加指南.md。


PWM驱动官方文档:RT-Thread设备和驱动 之 PWM设备。


本博客基于的BSP为stm32f103-dofly-lyc8,可到官网下载,BSP制作教程:RT-Thread ---- STM32系列BSP的制作教程总结。



二、个人总结

1、按照教程步骤,按PWM设备驱动的需求更改。


2、STMCubeMx配置如下:



3、在Kconfig中添加pwm驱动。代码如下



4、menuconfig 中勾选


5、scons --target=mdk5  生成新工程。


6、代码示例,是一盏LED灯亮度渐变。


#define LED_PIN_NUM         24      /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */

#define PWM_DEV_NAME        "pwm4"  /* PWM设备名称 */

#define PWM_DEV_CHANNEL     3       /* PWM通道 */

 

struct rt_device_pwm  *pwm_dev;      /* PWM设备句柄 */ 

 

static void tid_ledflash_entry(void *parameter)

{

    rt_uint32_t period, pulse;

 

    period = 50000;    /* 周期为0.5ms,单位为纳秒ns */

    

    pulse = 0;          /* PWM脉冲宽度值,单位为纳秒ns */

 

    /* 查找设备 */

    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);

    if (pwm_dev == RT_NULL)

    {

        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(10);                                                                                                                                                                                                                                                       

        pulse += 100;      /* 从0值开始每次增加5000ns */

 

        if (pulse >= period)

        {

            pulse = 0;

        }

 

        /* 设置PWM周期和脉冲宽度 */

        rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);

    }

}



关键字:RT-Thread  STM32系列  外设驱动  PWM外设 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic468550.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:有关STM32 外设USART 的一个小问题
下一篇:一种可行的STM32F103外设RTC使用方法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

RT-Thread 当中spi和SFUD的移植问题解决方案
系统的方便性,让我开始了rtt的学习。但是在添加spi来读取外部FLASH的时候,遇到了一些情况。例如,找不到设备,或者说无法读取FLASH的ID。下面通过介绍一套完整的流程来帮助大家熟悉。首先。cube mx。配置spi 2为打开然后在menuconfig当中实现对驱动的定义和添加。最后在里面添加,关于spi的驱动和sfud。然后生成工程。最后添加代码测试:https://www.rt-thread.org/document/site/programming-manual/device/spi/spi/可以得到结果。 
发表于 2019-09-27
RT-Thread 当中spi和SFUD的移植问题解决方案
MiniGUI联手RT-Thread,助力国产操作系统发展
北京飞漫软件技术有限公司宣布:将在 MiniGUI 4.0.2 版本中支持国产操作系统 RT-Thread! 这是自 MiniGUI 创始人魏永明在本月初宣布启动 HybridOS 开源协作计划以来的第一个好消息:国产开源基础软件终于走上了协作的道路! 1998 年年底,魏永明开始在清华大学开发 MiniGUI,1999 年 5 月在水木清华 BBS 上发布了 MiniGUI 的第一个版本。时至今日 20 年过去了,MiniGUI 仍然在嵌入式设备和物联网设备中发挥着重要作用。 2018 年,飞漫软件和珠海全志、福州瑞芯前后达成了一种新的合作模式:由芯片公司支付 MiniGUI 的商用许可费用,而这
发表于 2019-09-20
stm32f103应用rt-thread 1.2.5搭建的Keil工程
为了提高自己,学习stm32和freescale使用的硬件是公司的一些产品,开发人员已经基于RTX操作系统开发完成,为了提高一下(本人非开发),也有一些代码参考,故决定从rtx系统移植到rt-thread系统上刚接触rt-thread不久,发现网上也有一些rt-thread的工程,但基本上都与原版的rt-thread有改动,为了学习rt-thread且希望尽可能少的改动,在此记录下学习的过程..搭建的工程没有什么可以说的,运行后发送串口输出是乱码,找了一下原因是晶振不匹配,其实rt-thread上有讲,链接找不到了,贴下之前保存的记录工程下载地址:http://pan.baidu.com/s/1o7VSfaE1.修改晶振(官网
发表于 2019-08-24
stm32在rt-thread上的RTC(实时时钟)
rt-thread中已经部分实现了rtc的内容 ---> rtc.c ,调用rt_hw_rtc_init()函数即可使用msh设置date和time等rtc时钟来源有三个:HSE, LSE, LSI, 实现如下: 在原RTC_Configuration(void)进行替换即可    /* Enable LSE */    #ifdef USE_LSE        RCC_LSEConfig(RCC_LSE_ON);        /* Wait till LSE is ready */ 
发表于 2019-08-24
stm32在rt-thread上的PWR(电源管理)
*/        /* 单纯使用sysTick_Cmd(ENABLE)不能正常,rt_thread_delay()也会有影响 */        sysTick_init();    }    else if(STOP == NewState)    {        /* enter Stop mode */        sysTick_Cmd(DISABLE);       
发表于 2019-08-24
stm32的can总线理解及应用——程序对应stm32f103系列
有28个(互联型),但是STM32F103ZET6只有14个(增强型),每个滤波器组x由2个32为寄存器,CAN_FxR1和CAN_FxR2组成。STM32每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:● 1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位● 2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位此外过滤器可配置为,屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。而在标识符列表模式下,屏蔽寄存器也被当作
发表于 2019-09-30
stm32的can总线理解及应用——程序对应stm32f103系列
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved