[STM32H7] STM32H743+CubeMX-移植ThreadX

[复制链接]
5374|39
 楼主| drer 发表于 2021-9-4 17:08 | 显示全部楼层 |阅读模式
一、前言
令人激动的是,STM32Cube ecosystem迎来又一波的更新,名字是X-CUBE-AZROTS-H7。这个项目重大意义是从STM32CubeMX移植ThreadX,也可以移植rt-thread。目前使用STM32CubeMX移植ThreadX只支持H7系列的单片机,其他系列可能还需要等等。
视频教程:https://v.qq.com/x/page/c3232e9q80c.html
值得注意的是,我在移植的过程中发现,单独使用STM32CubeMX移植会有BUG,无法进入Mode界面配置ThreadX。但是,在STM32CubeIDE上使用STM32CubeMX的话,没有出现这个问题。

二、STM32CubeMX
2.1、新建工程

71202613337895e25d.png

 楼主| drer 发表于 2021-9-4 17:09 | 显示全部楼层
2.2、配置RCC

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:09 | 显示全部楼层
2.3、配置Clock Configuration

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:10 | 显示全部楼层
2.4、配置Debug方式

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:11 | 显示全部楼层
2.5、使能CPU ICache与DCache

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:12 | 显示全部楼层
2.6、下载ThreadX的内核

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg

如上图所示,配置AZURE_RTOS_Application与ThreadX:


HW_Profile选择Custom_Board

因为STM32H743IIT6并不是stm32 ecosystem评估板的芯片,所以只能选择Custom_Board了,意思是:自定义的板子

Application选择azure_rtos_app

没有其他选择了。

勾上ThreadX/Core

内核,必须要用啊。

勾上ThreadX/ TraceX support

RTOS的强大调试工具,调试的时候使用的。

接着,就可以按下界面右下角的ok,然后会弹回到原来的配置界面,然后左侧的选项栏里增加一个SoftWare Packs。


40943613338138608f.png


 楼主| drer 发表于 2021-9-4 17:13 | 显示全部楼层
三、ThreadX3.1、Mode

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:14 | 显示全部楼层
3.2、修改裸机的Timebase Source

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
这一步非常重要,裸机的Time Base Source改为TIM1,是因为Systick被RTOS占用了。总的来说,虽然移植了RTOS,但是裸机系统也需要时钟源。这个跟移植FreeRTOS时是一样的。


 楼主| drer 发表于 2021-9-4 17:15 | 显示全部楼层
3.3、配置ThreadX的User setting
757996133388d70b7f.png

TX_TIMER_TICKS_PER_SECOND改为1000
这个TIMER在UCOSIII与FreeRTOS都有,是系统调度的频率,改为1000的意思是每秒进行1000次的调度,即调度的频率是1000Hz,大部分的RTOS通常都配置1000。
其他配置暂时保持默认,至于每一个配置的意义,在ThreadX的官网有详细的介绍。


 楼主| drer 发表于 2021-9-4 17:16 | 显示全部楼层
3.4、修改ThreadX的堆栈

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg 至于应用程序的堆栈配置多大,这个需要看MCU的型号。STM32H743IIT6有1MB的RAM空间,分配10KB就相当于1/100的RAM空间。


 楼主| drer 发表于 2021-9-4 17:17 | 显示全部楼层
3.5、配置GPIO

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg 配置开发板的LED引脚的GPIO,用于验证ThreadX的线程有没有跑起来。


 楼主| drer 发表于 2021-9-4 17:18 | 显示全部楼层
3.6、修改Project Manager

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
生成代码之前,修改生成代码的方式。


 楼主| drer 发表于 2021-9-4 17:19 | 显示全部楼层
四、代码4.1、 main.c

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
从main.c可以看到ThreadX初始化的相关函数,证明TThreadX系统移植成功。可以编译一下代码,反正我是没有报错与告警。


 楼主| drer 发表于 2021-9-4 17:20 | 显示全部楼层
4.2、创建第一个ThreadX线程4.2.1、app_azure_rtos.h

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:21 | 显示全部楼层
4.2.2、app_azure_rtos.c

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:22 | 显示全部楼层
4.2.3、返回到app_azure_rtos.h修改一下

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg


 楼主| drer 发表于 2021-9-4 17:23 | 显示全部楼层
五、编译,烧录代码5.1、编译

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
还是没有报错与警告。

5.2、烧录代码

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbGxhY2U4OQ==,size_16,color_FFFFFF,t_70.jpg
完成,创建一个线程。。。。。


usysm 发表于 2021-9-5 21:35 | 显示全部楼层
ThreadX系统都支持什么软件?  
typeof 发表于 2021-9-5 21:35 | 显示全部楼层
这个占用多大的内存呢      
yujielun 发表于 2021-9-5 21:35 | 显示全部楼层
threadx手机系统?         
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

3317

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部