RT-Thread移植到STM32F103ZET使用ENV和Cube MX

一、概述

短时间学习了RT-Thread之后,做下简单总结,从一个小白的角度理解如何移植RT-Thread。学习RT时,也在网上找了好资料,看了别人如何移植,各种方式都有相对比较杂乱,对于大多数像我这样有些基础但没有那么强的编程能力的朋友很难去快速上手移植。接下来我从我的角度,尽量简单明了的带大家一步步移植,并且添加添加一个PWM功能。不对的地方多多理解。

二、所需工具

1、MDK5
2、Cube MX
Cube MX官网
3、ENV
RT-Thread官网
4、RT-Thread源代码 rt-thread 4.0.2版本
RT-Thread官网

三、软件安装

1、MDK5、Cube MX安装破解就不赘述了。
2、ENV安装 (安装文件路径不要有中文!!!)
RT-Thread官网详细教程

四、使用ENV开始移植

将rt-thread 4.0.2压缩文件解压后,打开目录 rt-thread\bsp\stm32 这里面是stm32的不同开发板的模板。我们使用这里面的模板制作属于自己的工程。(这里面有野火的开发板、正点原子的 还有些其他的,这些都没关系,都可以使用)。
在这里插入图片描述
我们就选择其中一个,比如stm32f103-atk-warshipv3正点原子的战舰开发板,打开后再空白处右键,使用ENV工具(ConEmu Here)。工具会自动识别当前目录,后续编译等操作也是在当前目录下的工程基础上进行的。


现在我们需要使用几个命令。
1、scons 编译
2、scons --dist

3、menuconfig

4、scons --target=mdk5 生成工程文件

这些命令也都在RT-Thread 官网上有详细介绍(文档中心—开发工具)。还有些其他命令可以自行学习,移植工程所需命令就上面四个就可以了。
RT官网

我们先编译下,没什么问题。


开始打包工程,就是将其他没用的文件去掉,只留下我们用的。
scons --dist

然后我们就可以看到,我们刚刚的文件夹中多出了一个 dist文件夹。
现在关闭ENV工具,打开dist文件夹中的stm32f103-atk-warshipv3的文件。这个文件就是我们新建的工程文件,在该文件路径下重新打开ENV工具,配置相应的需求。

!!!!注意:其实移植到这,这个工程算是初步移植完成,下面我们可以添加我们所需要的功能,接下来我在工程上增加个PWM输出功能

五、配置所需功能与系统文件

使用menuconfig命令
在这里插入图片描述
在这里插入图片描述
我们使用第四个 Hardware Drivers Config(硬件驱动配置)
!!!注意:

空格键选中
Enter进入
箭头上/箭头下光标上下移动

我们进入 Hardware Drivers Config------On-Chip Periperal Drivers-----Enable pwm (New)-----Enable timer3 output pwm------Enable PWM3 channle1

!!!注意:Enable pwm (New) 、Enable timer3 output pwm、Enable PWM3 channle1 这三个在选择的时候,先使用空格键 选中后(文字前面有个星号就是选中)再使用Enter进入目录,否则进去后看不到下面的目录。意思就是你要先选择使用这项功能,才能进入其中选择其中的子功能

这样我们就选择了PWM3 通道1了。然后一路ESC,最后弹出选择是否保存,选择yes。
在这里插入图片描述
接下来我们要重新生成工程。
使用命令 scons --target=mdk5
在这里插入图片描述
在这里插入图片描述
配置了PWM的新工程已经好了,可以使用scons自己编译下会发现有个错误,HAL_TIM_MspPostInit 它没有定义。这个没关系,是因为战舰开发板这个模板工程已经配置了PWM3的一些功能导致的冲突。

六、使用Cube MX配置引脚

关闭ENV工具,暂时使用不到了。在我们刚刚最新移植的工程目录下,打开
rt-thread\bsp\stm32\stm32f103-atk-warshipv3\dist\stm32f103-atk-warshipv3\board\CubeMX_Config文件夹。打开CubeMX_Config.ioc文件。
在这里插入图片描述
Cube MX软件需要联网,打开软件可能需要下载一些文件包,点击download就可以。
在这里插入图片描述

使用战舰开发板打开后,左侧Timers中Time8应该是有黄色感叹号,右侧芯片图上 在PA12附近(刚刚修改的时候忘了是哪个引脚了)有个引脚标着 TIM3_CH1,左键那个引脚Rest_state 复位下,TIM8的功能都取消掉。
配置左侧TIM3, 时钟选择Internal Clock时钟就可以,Channel1选择PWM General CH1。同时右侧芯片PA6会变绿,显示TIM3_CH1,这样引脚就配置成功了。
然后点击软件右上角“GENERATE CODE”生成代码就OK了。

然后打开我们新建的工程,注意目录。一定是我们新打包的工程,打开工程文件“Project.uvprojx” ,这个才是新建的MDK5的文件。
在这里插入图片描述
编译下,没有问题。
在这里插入图片描述

到此所有配置工作已经结束了,PWM的代码需要自己写下,在RT-Thread官网相应的库函数也有,照着样子写就可以了

七、PWM相应库函数添加到C文件中

RT-Thread官网-----文档中心------标准版本-----设备和驱动-----PWM设备 里面有详细介绍
RT-Thread官网
里面我们所需要的函数:

#define PWM_DEV_NAME        "pwm3"  /* PWM设备名称 */
#define PWM_DEV_CHANNEL     1       /* PWM通道 */
struct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */
rt_uint32_t period, pulse;

period = 500000;    /* 周期为0.5ms,单位为纳秒ns */
pulse = 0;          /* PWM脉冲宽度值,单位为纳秒ns */
/* 查找设备 */
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
/* 设置PWM周期和脉冲宽度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/* 使能设备 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
/* 关闭设备通道 */
rt_pwm_disable(pwm_dev,PWM_DEV_CHANNEL);

我们使用的PWM3 的通道1。把代码添加到主函数就可以实现简单的PWM波输出了。

周期和占空比备注不对,这个自己换算吧,还有就是把关闭设备通道注释掉!!!!,我是用示波器查看的,你们板子上要是有对应引脚的LED查看更直接

八、结语

1、ENV工具是将RT的PWM的系统文件添加好,Cube MX是将相对应的引脚进行配置。配置好后再RT官网上找到相应的库函数调用就可以了。
2、函数中 ”查找设备“一行相当于我们裸机写代码中的PWM的时钟初始化、引脚初始化等功能,所以我们使用的时候就很方便了。也就是底层功能的驱动RT已经帮我们写好了,我们只需要调用就可以了,以后要是有板上的新资源,底层驱动需要自己写,添加上去。这个我还没学 以后再学再补充吧。

记 2022.10.10 在配置CubeMX时 一定要选择internal clock!!!!在使用其他PWM时例如PWM9,一定要在internal clock出调√,这几个定时器选择internal clock时,方式略有不同!!!!!

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值