一、前言
STM32CubeMX生成的Keil项目移植RT-Thread的文章搜索了好多,不是在STM32CubeMX中添加RT-Thread就是非STM32CubeMX生成的项目添加RT-Thread的教程,今天总结一下使用STM32CubeMX生成的Keil项目移植RT-Thread系统。
准备工作
- Keil已经安装好RT-Thread,Keil RT-Thread 离线安装包
- STM32CubeMX任意版本安装完成,STM32CubeMX 安装包
二、创建工程
在STM32CubeMX中选择好芯片型号,在 System Core
- NVIC
- Code generation
中取消 Hard fault interrupt
和 Pendable request for system service
中断,如下如所示。
其他配置根据项目需求执行配置即可
最后点击 GENERATE CODE
生成代码。
三、移植代码
1、引入 RT-Thread
包
打开刚刚生成的Keil工程,按照下图流程引入 RT-Thread
包:
引入完成后会在 Project
列表中发现多出来一个 RTOS
目录。
2、修改系统Tick
打开 Application/User/Core
中的 stm32g0xx_it.c
文件,添加以下代码:
① 在顶部添加 extern void rt_os_tick_callback(void);
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP */
extern void rt_os_tick_callback(void);
/* USER CODE END PFP */
② 在 SysTick_Handler
函数中添加 rt_os_tick_callback();
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
rt_os_tick_callback();
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BEGIN SysTick_IRQn 1 */
/* USER CODE END SysTick_IRQn 1 */
}
打开 RTOS
中的 board.c
文件,屏蔽掉 #error "TODO 1: OS Tick Configuration."
3、调整系统配置
打开 RTOS
中的 rtconfig.h
文件,点击 Configuration Wizard
标签进入下图界面,这一步根据项目需要进行修改,也可以使用默认参数。
四、测试
在main.c
中添加以下测试代码:
#include "rtthread.h"
static rt_thread_t tid_led = RT_NULL;
void led_task(void *arg)
{
while(1)
{
rt_thread_mdelay(500);
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
}
在main
函数中添加以下测试代码:
tid_led = rt_thread_create("thread_led", led_task, RT_NULL, 256, 5, 20);
if (tid_led != RT_NULL)
{
rt_thread_startup(tid_led);
}
最后编译代码,完成。