1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
软件环境: 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) 我对 STM32F107 不熟悉,查阅头文件发现 STM32F767 中无DR寄存器,只有TDR和RDR,我尝试更改为RDR寄存器,但是仍然无法读取字符,我目前在嵌入式方面刚刚入门,求教如何写一个适配 STM32F767 的,使用查询方式或中断方式的 uart 获取字符的函数以对接 FinSH 组件,使得单片机运行时可以读取串口调试工具的输入。 |
|
相关推荐
4个回答
|
|
这里改成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; } |
|
|
|
我仔细重读了一遍文档,按文档的说明将该部分代码从finsh_port.c转移到了board.c,然后把开头的 RT_WEAK 删除了,现在的情况是输入命令后可以读取输入的第一个字符,但是其他的字符都没接收,有没有什么解决思路?
|
|
|
|
|
|
|
|
串口用的是友善串口调试工具Serial Port Utility,我发现通过注释
rt_thread_mdelay(10);可以使终端完全读取字符并输出,但是这样该线程是不是就独占了CPU? 试了下文档中提到的中断实现方式,代码没跑起来,问题一是教程用的是uart2,我用的是1,改成2就无法在终端中显示和输入内容了,但是这个应该不是很重要;问题二是多个函数重定义了,重定义的函数最初定义在stm32f7xx_hal_usart.c中,我感觉应该不能把hal库的函数给删掉吧。 另外问个题外话,RT-Thread Studio创建的普通工程可以直接下载到开发板上运行,因此我也不太理解如果是用Studio的话,创建Nano工程意义是啥。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
529 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2000 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1174 浏览 0 评论
1674 浏览 0 评论
1439 浏览 0 评论
74728 浏览 21 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 15:17 , Processed in 0.643606 second(s), Total 75, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号