STM32CubeMX,Nano3.1.3移植FinSH问题

发布于 2021-01-16 15:01:25

按照文档中心提供的方法移植FinSH的时候,出现问题感觉移植了半个FinSH,输入的命令只能是单个的单个的,无法连成一条,具体现象如下图所示:55555555555555.png

环境:使用的STM32CubeMX6.1.1,Nano版本3.1.3

串口1

添加函数:
void rt_hw_console_output(const char *str)
{

    rt_size_t i = 0, size = 0;
    char a = '\r';
    
    __HAL_UNLOCK(&huart1);
    
    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
    if (*(str + i) == '\n')
    {
            HAL_UART_Transmit(&huart1, (uint8_t *)&a, 1, 1);
    }
            HAL_UART_Transmit(&huart1, (uint8_t *)(str + i), 1, 1);
    }

}

char rt_hw_console_getchar(void)
{

    int ch = -1;
    if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
    {
            ch = huart1.Instance->DR & 0xff;
    }
    else
    {
            if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE) != RESET)
            {
                    __HAL_UART_CLEAR_OREFLAG(&huart1);
            }
            rt_thread_mdelay(10);
    }
    return ch;

}
1.png
2.png
3.png
4.png
5.png
6.png
7.png
8.png
9.png
10.png

查看更多

关注者
0
被浏览
174
Venjor
Venjor 2021-01-18

我也遇到了这个问题,然后我发现,把console_getchar函数里面的rtthread_mdelay屏蔽掉就可以了

3 个回答
whj467467222
whj467467222 2021-01-16

要不,你用 RTT Studio 生成一个 nano 的工程对比一下?

chuan0144
chuan0144 2021-01-18

UART_FLAG_ORE 这个是串口接收溢出中断标志,正常来说串口不应该出现这个错误,至少不应该频繁出现,否则意味者数据已经被丢失了。

造成串口接收溢出错误的原因是串口数据没有被及时取走。

请看下面代码,nano 版本的串口接收实际上是在一个任务中死循环接收数据。这样的做法不太好,死循环会一直占用处理器;但如果在任务中加入睡眠,又会造成接收串口数据不及时。

串口接收应该考虑加入接收缓冲区和信号量。参考完整版的 rt-thread 的做法。

static int finsh_getchar(void)
{
    extern char rt_hw_console_getchar(void);
    return rt_hw_console_getchar();
}
void finsh_thread_entry(void *parameter)
{
    ...
    ...
    while (1)
    {
        ch = finsh_getchar();
        if (ch < 0)
        {
            continue;
        }
        ...
        ...
    }
}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览