当前位置:网站首页>STM32基于HAL库的串口接受中断和空闲中断
STM32基于HAL库的串口接受中断和空闲中断
2022-07-27 03:33:00 【昊月光华】
前言
在通信方面。UART由于全双工通信,可以同时接受数据和发送数据而被广泛使用。
而接受数据则又有很多种方法
比如:
<1>根据结束符判断,数据是字符串形式,所以一般串口接受的接受符就是"\r\n" 换成16进制ascil码显示就是 0X0D 0X0A (对应\r\n)
<2>定时器中断,设计"喂狗信号量"也就是串口空闲的时间,在串口接受后的定时器里不断递减,减到零则判断接受完毕,接受数据则喂狗刷新递减时间。(这也是单片机常见的串口接受思路)
参考我51的工程:
单片机串口中断以及消息收发处理——对接受信息进行判断实现控制_昊月光华的博客-CSDN博客_单片机串口中断怎么触发
<3>STM32有很多种方式,前两种在某些情况都很可以用。
但是第一种只适用于判断结束符。在我最近做射频模块(RF)串口发送的数据(一种16进制的格式,没有\r\n的结束符)就受限了,另外第二种需要搭配定时器。而本次写作介绍的串口接受中断和空闲中断则让我感到满意 YYDS!!!
理解
串口接受中断 :
使能串口接受中断RXEN后,串口接受一个数据包 ,一帧 (通常 8位数据位,一位结束位)则进入中断。
以定时器2为例
使能
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);实际处理函数
USART2_IRQHandler(void)在HAL库里这个函数是不能被重定义,在stm32f1xx_it.c里 加__weak 表示弱定义可被重写
__weak void USART2_IRQHandler(void)串口空闲中断:
在使能IDLE ,在串口接受完一帧数据后,在一个字节的时间内串口保持空闲则触发串口空闲中断
再次进入 USART2_IRQHandler(void)
使能
__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);和串口接受数据的中断处理函数一样。 像是上面第二种方法的改进,因为第二种方法不知道定时多长时间,因为数据发送间隔大小不知道,只能估摸着一个值来通过衰减的“喂狗信号量”来判断。同样,如果数据太大且不停的发送则也不会空闲。
值得注意的是,串口接受完后空闲必须清除空闲标志位。通过读串口DR寄存器里的值来清除IDLE标志位,否则程序一直触发空闲中断。
比如串口中断处理代码(以串口三为例) 注意(用__weak修饰hal库stm32f1x_it.c里的以此重写)
void USART3_IRQHandler(void){
uint8_t temp;
if(huart3.Instance->SR & UART_FLAG_RXNE){
Rx_uart3_signal=2;
temp=huart3.Instance->DR;
Rx_uart3_buf[Rx_uart3_cnt++]=temp;
}
else if(huart3.Instance->SR & UART_FLAG_IDLE){
temp=huart3.Instance->DR;
Rx_uart3_signal=0;
}
}通过Rx_uart3_signal=0判断一次接受完毕,在while中打印数据。给我的效果个感觉都非常不错,是第二种方法以硬件的方式(stm32自带的空闲中断)而不是定时器实现了数据包的接受。
参考
边栏推荐
- 2022年危险化学品经营单位主要负责人复训题库及答案
- Use tag tag in golang structure
- Maximum nesting depth of parentheses
- 零基础小白也能懂的 Redis 数据库,手把手教你易学易用!
- Interview question 16.05 factorial mantissa
- What is animation effect? What is the transition effect?
- JS to realize page Jump and parameter acquisition and loading
- 三种常见的移动底盘运动学模型分析
- Analysis of three common kinematic models of mobile chassis
- 通信协议综述
猜你喜欢

Session&Cookie&token

Plato Farm全新玩法,套利ePLATO稳获超高收益
![[MySQL series] MySQL index transactions](/img/85/04eb67471ba1348af2a26bc4621c65.png)
[MySQL series] MySQL index transactions

Is VR panorama just needed now? After reading it, you will understand

List Simulation Implementation

卷积神经网络——灰度图像的卷积

Practice of microservice in solving Library Download business problems

网工知识角|只需四个步骤,教会你使用SecureCRT连接到eNSP,常用工具操作指南必看

Parallels Desktop启动虚拟机“操作失败”问题解决

influxDB 基础了解
随机推荐
2022危险化学品生产单位安全生产管理人员考试题模拟考试题库模拟考试平台操作
Learning route from junior programmer to architect + complete version of supporting learning resources
Principle of bean validation --07
Is VR panorama just needed now? After reading it, you will understand
从根到叶的二进制数之和
Project time zone problem solving
搜索旋转排序数组
H. 265 web player easyplayer's method of opening video to the public
[untitled]
整理字符串
卷积神经网络——24位彩色图像的卷积的详细介绍
Eureka-服务注册中心
Nonlinear optimal tracking control based on wind energy conversion system (realized by matlab code)
EVT interface definition file of spicy
Five basic data structures of redis
js三种遍历数组的方法:map、forEach、filter
Introduction to JVM principle
DINO 论文精度,并解析其模型结构 & DETR 的变体
Using LCD1602 to display ultrasonic ranging
大咖说·图书分享|精益产品开发:原则、方法与实施