Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
串口
STM32串口中断以及片子稳定性
发布于 2022-06-22 16:42:14 浏览:785
订阅该版
关于STM32的串口,应该是应用最广泛且相对其他的外设接口也比较简单的。但是,要注意,串口的中断处理。串口的发送和接收,都可以用中断和轮询的方式。我本次项目采用的是发送完成中断和数据帧接收中断(也可叫做接收空闲中断)。若想要片子运行稳定性提升的话,一定要对串口中断中的一些异常中断做处理。看代码: ```c void LOGUART_IRQHandler(UART_HandleTypeDef *huart) { uint8_t byte = 0; if (__HAL_UART_GET_FLAG(huart, UART_FLAG_NE) != RESET) __HAL_UART_CLEAR_NEFLAG(huart); if (__HAL_UART_GET_FLAG(huart, UART_FLAG_FE) != RESET) __HAL_UART_CLEAR_FEFLAG(huart); //处理错误异常 if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) != RESET) { __HAL_UART_CLEAR_OREFLAG(huart); uint8_t tmp = 0; HAL_UART_Receive_IT(huart, (uint8_t *)&tmp, 1); } //接收字符中断 if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE) != RESET) { byte = huart->Instance->RDR;//获取DR数据 //将数据放入缓冲区 if (log_data_cnt < LOG_BUF_SIZE) { log_recv_buff[log_data_cnt] = byte; //接收字符 log_data_cnt++; } __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_RXNE); } else if(RESET != __HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) //判断是否是空闲中断 { __HAL_UART_CLEAR_IDLEFLAG(huart); //清楚空闲中断标志(否则会一直不断进入中断) if (log_data_cnt > 0) //有数据才发送 { struct log_data_msg msg = {0}; //消息队列发送 isr msg.len = log_data_cnt; memcpy(msg.data, (void*)log_recv_buff, log_data_cnt); xQueueSendToBackFromISR(log_send_msg_queue, &msg, NULL); } //清零 log_data_cnt = 0; memset((void*)log_recv_buff, 0, sizeof(log_recv_buff)); } HAL_UART_IRQHandler(huart); } ``` 其中,就有关于串口接收中断中所有相关的要注意的中断标志处理。着重关注几个处理异常的中断标记,UART_FLAG_NE,UART_FLAG_FE,UART_FLAG_ORE,这三个标记记得要在中断中处理一下。避免长期运行过程中,出现程序异常卡死。若出现,程序卡死,而且拔掉串口调试器后,程序恢复,就很有可能是串口中断函数中出现问题。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Liutao
这家伙很懒,什么也没写!
文章
9
回答
0
被采纳
0
关注TA
发私信
相关文章
1
串口DMA发送数据时,数据被覆盖
2
关于串口DMA模式下rt_device_close问题
3
利用stm32f427实现usb转串口,电脑端什么也没有识别到
4
finsh 控制台 适配 RS 485请大神指点????
5
uart_sample.c 中,读串口设备时偏移量pos要设置为-1而不是0?
6
【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常
7
串口无法接受数据,但可以发送
8
串口如何有效的清除掉接收缓冲,而不必一个一个的去读取
9
串口接收使用方式问题
10
雅特力FINSH问题
推荐文章
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组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部