Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
UART
STM32F103 串口1 console口 造成死机
发布于 2019-06-21 15:57:08 浏览:3052
订阅该版
先说结论: STM32F103的UART1,虽然在注册驱动的时候设置了中断发送,中断接收, DMA发送等多种方式,但是在finsh的设置console的时候会造成还原到轮询(POLL)式发送.此时如果外部通信有问题,会造成单片机死机. 具体分析: rtthread3.1.0 STM32F103 串口1作为console口. rt_device_t rt_console_set_device(const char *name) { rt_device_t new, old; /* save old device */ old = _console_device; /* find new console device */ new = rt_device_find(name); if (new != RT_NULL) { if (_console_device != RT_NULL) { /* close old console device */ rt_device_close(_console_device); } /* set new console device */ rt_device_open(new, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM); _console_device = new; } return old; } rt_device_open(new, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM); 这一句造成了打开串口1的时候没有选择中断式发送,或者DMA式发送, 所以他选取了轮询式发送. 轮询发送: static int stm32_putc(struct rt_serial_device *serial, char c) { struct stm32_uart* uart; RT_ASSERT(serial != RT_NULL); uart = (struct stm32_uart *)serial->parent.user_data; if (serial->parent.open_flag & RT_DEVICE_FLAG_INT_TX) { if (!(uart->uart_device->SR & USART_FLAG_TXE)) { USART_ITConfig(uart->uart_device, USART_IT_TC, ENABLE); return -1; } uart->uart_device->DR = c; USART_ITConfig(uart->uart_device, USART_IT_TC, ENABLE); } else { uart->uart_device->DR = c; while (!(uart->uart_device->SR & USART_FLAG_TC));//这一句会造成死循环卡死再这里的风险. } return 1; } 很奇怪, 什么情况下, 这个while 会卡死? 再次总结问题: 1) console 为什么必须用轮询模式?这个问题比较隐蔽, 大家可能一直以为用的是中断式发送.或者DMA发送. 2) 什么情况下, 串口轮询发送会失败?
查看更多
小小
2019-09-19
这家伙很懒,什么也没写!
我也遇到同样的问题,前面几位有没有解决方法! 难度只能通过超时退出?如果这样做,感觉没找到问题本质!!
8
个回答
默认排序
按发布时间排序
zhangjun
2019-06-21
这家伙很懒,什么也没写!
1,轮询简单稳定,因为涉及的东西少。 2,终端一般只是哪来调试的,输入输出内容都不大 轮询失败导致死循环的条件基本就两种 1,串口模块初始化配置就有问题。 2,芯片本身有bug。
swet123
2019-06-29
ztlchina@foxmail.com
请问, 芯片本身有BUG, 怎么理解?
来一颗糖
2019-07-01
这家伙很懒,什么也没写!
[i=s] 本帖最后由 来一颗糖 于 2019-7-1 17:19 编辑 [/i] 你这份工程,能发出来让我看下嘛? 因为看你贴的源码,不是最新的 bsp 驱动源码,特别是 stm32_putc 这个函数的实现。最新的 rt-thread ,有关 stm32 的串口驱动,经历过多次修复与改进。 下面链接存放着 rt-thread 最新的源码,推荐使用 lts-v3.1.x 或 master 分支的源码。 [https://github.com/RT-Thread/rt-thread](https://github.com/RT-Thread/rt-thread) master 分支是最新的,所有的更新第一时间出现在这里。 lts-v3.1.x 是长期维护的。
来一颗糖
2019-07-01
这家伙很懒,什么也没写!
[attach]9384[/attach] [attach]9383[/attach]
zhangjun
2019-07-01
这家伙很懒,什么也没写!
>请问, 芯片本身有BUG, 怎么理解? --- 对于这种卡死在检测发送标志位的情况。 1,99.9999%不会是芯片bug,只有在确定是串口有关寄存器配置一点问题的情况下出现这种情况才算芯片有bug。 2,99.9999%是串口初始化有故障了。
wuhanstudio
2019-09-05
这家伙很懒,什么也没写!
一转眼 3个月了,今天我也碰到这个问题,是不是串口初始化没弄好 积分 +2
swet123
2019-11-29
ztlchina@foxmail.com
这个问题过了好久了。 当时是临时增加一个超时, 后来我分析问题可能是硬件的原因。因为有些板子没有问题,有些板子有问题。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.1k
关于作者
swet123
ztlchina@foxmail.com
提问
13
回答
61
被采纳
2
关注TA
发私信
相关问题
1
rt thread 2.0.2 usart 接收缓存问题
2
关于STM32串口通信的问题
3
STM32F1+RTT串口接收终端数据丢失问题
4
UART TX丢数据?
5
RTT打开串口的时候如何自定义波特率呢?
6
STM32F4的USART数据接收问题
7
串口1234使用问题
8
串口接收回调函数
9
LPC18xx UART问题讨论
10
x1000串口配置的失败问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
8
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
chenyaxing
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
3
次点赞
YZRD
1
篇文章
2
次点赞
Days
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部