上一篇已经完成在cubemx中添加rtt内核源码,这一篇来简单的添加Finsh控制台;
STM32CubeMX+RTThread 生成Keil5工程
一、添加Finsh源码
step 1

step 2

step 3

二、配置串口、生成工程
step:配置串口1为异步串口,其他参数保持默认值;PA9(TX)、PA10(RX)

三、添加代码
(以下代码直接添加即可,不需要更改源码,因为源码函数定义为__weak类型)
step 1
由于SYS时钟,我也选择了滴答定时器,RTT也是使用滴答定时器,所以为了防止复用;需要将HAL库的几个函数重新实现一下,替换为tt的接口。
//配置定时器
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
return HAL_OK;
}
//获取滴答值
uint32_t HAL_GetTick(void)
{
return rt_tick_get();
}
//毫秒延时
void HAL_Delay(uint32_t Delay)
{
rt_thread_mdelay(Delay);
}
step 2
添加Finsh输入输出函数。(rtt内核源码均仅使用换行符,没有回车符,故需要在输出接口处实现回车换行)
void rt_hw_console_output(const char *str)
{
rt_size_t size = rt_strlen(str);
uint8_t *ch = 0;
for(rt_size_t i = 0; i < size; i++)
{
ch = (uint8_t *)(str + i);
if(*ch == '\n')
{
HAL_UART_Transmit(&huart1, (uint8_t *)"\r\n", 2, 1);
continue;
}
HAL_UART_Transmit(&huart1, ch, 1, 1);
}
}
char rt_hw_console_getchar(void)
{
uint8_t ch = 0;
if(HAL_UART_Receive(&huart1, &ch, 1, 1) == HAL_OK)
{
return ch;
}
return ch;
}
* 一些bug
程序跑不起来?
- 可能HAL那几个滴答时钟的函数没有重新实现,在死等。
- 可以如上所说,重现那几个函数,如果不愿意,可以修改SYS定时器为TIMx;
时钟不对?
- 这是由于时钟初始化的问题,由于rtt在main函数之前还插入了一个$Sub$$main,对板子硬件的初始化在board.c中的rt_hw_board_init()中,所以在这里就要初始化时钟了;修改如下:
——end

本文详细介绍了如何在STM32CubeMX中添加RTThread Finsh控制台,并在Keil5环境下配置串口和生成工程。通过重写HAL库函数,实现了RTThread与HAL库的时钟同步,同时添加Finsh输入输出函数,确保换行正常。遇到问题如时钟初始化或程序无法运行时,提供了相应的解决建议。

1477

被折叠的 条评论
为什么被折叠?



