STM32CubeMX+RTThread 移植Finsh

上一篇已经完成在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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值