嵌入式技术论坛
直播中

孙成红

8年用户 1451经验值
私信 关注
[问答]

STM32F767移植rt-thread nano时Finsh无法读取输入怎么办

软件环境:

Keil V5.36

RT-Thread Nano 3.1.5

官网提到,移植 RT-Thread Nano 时需要编辑 char rt_hw_console_getchar(void),官网提供的是 STM32F107 版本的代码:

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

我对 STM32F107 不熟悉,查阅头文件发现 STM32F767 中无DR寄存器,只有TDR和RDR,我尝试更改为RDR寄存器,但是仍然无法读取字符,我目前在嵌入式方面刚刚入门,求教如何写一个适配 STM32F767 的,使用查询方式或中断方式的 uart 获取字符的函数以对接 FinSH 组件,使得单片机运行时可以读取串口调试工具的输入。

回帖(4)

李梅

2022-11-2 14:09:08
这里改成RDR倒是对的,如果还不行建议检查一下其他原因,比如硬件连接,管脚配置等。
简单一些,建议直接用RT Thread Studio创建Nano工程,避免再去移植了。
可以看一下源码中drv_usart.c中这个函数的写法,是一样的

char rt_hw_console_getchar(void)
{
    int ch = -1;
    if (__HAL_UART_GET_FLAG(&handle, UART_FLAG_RXNE) != RESET)
    {
#if defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32F0)
    || defined(SOC_SERIES_STM32L0) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32H7)
    || defined(SOC_SERIES_STM32G4)
        ch = handle.Instance->RDR & 0xff;
#else
        ch = handle.Instance->DR & 0xff;
#endif
    }
    else
    {
        if(__HAL_UART_GET_FLAG(&handle, UART_FLAG_ORE) != RESET)
        {
            __HAL_UART_CLEAR_OREFLAG(&handle);
        }
        rt_thread_mdelay(10);
    }
    return ch;
}
举报

孙成红

2022-11-2 14:09:23
我仔细重读了一遍文档,按文档的说明将该部分代码从finsh_port.c转移到了board.c,然后把开头的 RT_WEAK 删除了,现在的情况是输入命令后可以读取输入的第一个字符,但是其他的字符都没接收,有没有什么解决思路?
举报

李梅

2022-11-2 14:09:32
你的串口终端用的什么工具,有没有完全把命令的几个字符发出?
然后建议单步调试一下看看呢。
举报

孙成红

2022-11-2 14:09:43
串口用的是友善串口调试工具Serial Port Utility,我发现通过注释
rt_thread_mdelay(10);可以使终端完全读取字符并输出,但是这样该线程是不是就独占了CPU?

试了下文档中提到的中断实现方式,代码没跑起来,问题一是教程用的是uart2,我用的是1,改成2就无法在终端中显示和输入内容了,但是这个应该不是很重要;问题二是多个函数重定义了,重定义的函数最初定义在stm32f7xx_hal_usart.c中,我感觉应该不能把hal库的函数给删掉吧。

另外问个题外话,RT-Thread Studio创建的普通工程可以直接下载到开发板上运行,因此我也不太理解如果是用Studio的话,创建Nano工程意义是啥。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分