当前位置: 首页 > news >正文

STM32串口不定长接收空闲中断

目录

  • 1. 开启串口空闲中断
  • 2. 合理开关中断
  • 3. 串口发送函数

1. 开启串口空闲中断

最近接触到的 Modbus RTU 项目使用到了串口接收中断和空闲中断。记录一下

初始化可以直接套用正点原子的初始化,只需要添加一行即可

  USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断
}

2. 合理开关中断

FreeRTOS是不能一直串口空闲中断之中的。

我们可以使用这种中断方式来处理:在接收完数据后,开启串口空闲中断;随后在接收完毕后,会触发空闲中断,将数据全部打印出来,此时CPU会归还给任务调度器并使其恢复任务调度。

函数是修改的正点原子的,现在不需要在尾部加入 “\r\n” 也能照常使用。

void USART1_IRQHandler(void)                	//串口1中断服务程序
{u8 Res;if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //空闲中断{printf("%s\n",USART_RX_STA);USART_ITConfig(USART1, USART_IT_IDLE, DISABLE);//关闭串口空闲中断}if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断{Res =USART_ReceiveData(USART1);	//读取接收到的数据USART_RX_BUF[USART_RX_STA]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断} 
} 

3. 串口发送函数

还写了一个发送函数,以后调试不愁printf函数只能一个串口用了。

void STMLOG(USART_TypeDef* USARTx, u8 *Data)
{while(*Data!='\0'){ while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET); USART_SendData(USARTx,*Data);Data++;}
}
http://www.lryc.cn/news/371719.html

相关文章:

  • Ubuntu 设置开机启动脚本
  • C# Task 包含 await ConfigureAwait CancellationTokenSource
  • Python数据分析与建模库-02科学计算库Numpy01-05合集
  • 【前端项目笔记】1 登录与登出功能实现
  • 是字符串定义以及在C语言中字符串是如何表示的
  • 辽宁普通测径仪升级智能测径仪后都有哪些改进?
  • 【微信小程序】事件分类以及阻止事件冒泡
  • 踩坑!被node-sass折磨的一天
  • App UI 风格打造独特体验
  • 【学习笔记8】阅读StyleID论文源码
  • wordpress旅游网站模板
  • vs2019 c++20规范 STL 库中头文件 <atomic> 源码注释及探讨几个知识点
  • Flink任务如何跑起来之 2.算子 StreamOperator
  • 学习笔记——路由网络基础——路由优先级(preference)
  • 数据预处理——调整方差、标准化、归一化(Matlab、python)
  • opencv_特征检测和描述
  • CID引流电商下的3C产品选品策略深度解析
  • DeepSORT(目标跟踪算法)中的状态向量与状态转移矩阵
  • 李宏毅深度学习01——基本概念简介
  • TcpClient 服务器、客户端连接
  • 13大最佳工程项目管理系统软件盘点
  • SpringMVC:拦截器(Interceptor)
  • 【Python】selenium使用find_element时解决【NoSuchWindowException】问题的方法
  • PTA:7-188 水仙花数
  • HTML静态网页成品作业(HTML+CSS+JS)—— 美食企业曹氏鸭脖介绍网页(4个页面)
  • SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】
  • 人脸匹配——OpenCV
  • 韩顺平0基础学java——第22天
  • 神经网络介绍及教程案例
  • 16个不为人知的资源网站,强烈建议收藏!