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

STM32CubeIDE串口空闲中断实现不定长数据接收

STM32F051空闲中断实现串口不定长数据接收

  • 目的
  • 编程软件
    • 配置串口开中断
    • 中断程序
  • 运行结果

目的

在串口输入不定长数据时,通过串口空闲中断来断帧接收数据。

编程软件

STM32CubeIDE
STM32CubeMX配置MCU。通过对端口配置,自动生成程序,减少编程量。

配置串口开中断

配置串口打开中断有两条指令,可以将这两条指令放在:
static void MX_USART1_UART_Init(void)下面,注意,还是要放在用户代码段,这样再重新生成C/C++软件时不会被清除。

/* USER CODE BEGIN USART1_Init 2 */__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);//接收中断__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//空闲中断/* USER CODE END USART1_Init 2 */

中断程序

在stm32f0xx_it.c文件下找到void USART1_IRQHandler(void),在其中的用户代码段中添加:

/* USER CODE BEGIN USART1_IRQn 0 *///接收中断uint8_t rxData = 0;if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET){HAL_UART_Receive(&huart1, &rxData, 1, 1000);if(Cnt < 256){rx_buff[Cnt] = rxData;Cnt++;}__HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_RXNE);}// 空闲中断if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_IDLE) != RESET){//一帧数据接收完成USART1_IdleCallback(rx_buff, Cnt);Cnt = 0;__HAL_UART_CLEAR_IDLEFLAG(&huart1);}/* USER CODE END USART1_IRQn 0 */// 此处是原来已经有的程序,保留:HAL_UART_IRQHandler(&huart1);

接着在这一部分的程序下面添加回调函数:

/* USER CODE BEGIN 1 */
//回调函数
void USART1_IdleCallback(uint8_t *pData,uint16_t len)
{while(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_TC) != SET);HAL_UART_Transmit(&huart1, pData, len, 1000);
}
/* USER CODE END 1 */

这一部分执行将串口输入的数据回显输出到串口。

运行结果

在这里插入图片描述

相关文章:

  • 华为OD机试真题-智能成绩表-2023年OD统一考试(C卷)
  • 线性代数入门与学习笔记
  • ViT:视觉 Transformer
  • VS Code 上已达250万 Java 开发者!微软和红帽一起公布 VS Code Java 未来六个月路线图
  • 机器学习实验三:支持向量机模型
  • 连锁零售企业如何优化网络性能?
  • 【开源】基于Vue+SpringBoot的教学资源共享平台
  • Redis研学-三种特殊类型的常用命令
  • blender 数字键盘上的快捷键
  • el-tree搜索的使用
  • svn使用步骤
  • Qt开发 之 记一次安装 Qt5.12.12 安卓环境的失败案例
  • IntelliJ插件开发-Code Vision Hints
  • 菜鸟学习日记(python)——循环语句
  • 酶联免疫抗体试剂——博迈伦生物
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 2017前端实习生面试总结
  • Android组件 - 收藏集 - 掘金
  • Asm.js的简单介绍
  • CSS盒模型深入
  • DOM的那些事
  • JavaWeb(学习笔记二)
  • Mac转Windows的拯救指南
  • Python_OOP
  • Spring核心 Bean的高级装配
  • Vue ES6 Jade Scss Webpack Gulp
  • vue.js框架原理浅析
  • Vue2 SSR 的优化之旅
  • windows下mongoDB的环境配置
  • Xmanager 远程桌面 CentOS 7
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何解决微信端直接跳WAP端
  • 收藏好这篇,别再只说“数据劫持”了
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 昨天1024程序员节,我故意写了个死循环~
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (27)4.8 习题课
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (TOJ2804)Even? Odd?
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (第30天)二叉树阶段总结
  • (二)PySpark3:SparkSQL编程
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (十六)串口UART
  • (循环依赖问题)学习spring的第九天
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)JAVA中的堆栈
  • (转载)(官方)UE4--图像编程----着色器开发
  • ******之网络***——物理***
  • .net对接阿里云CSB服务
  • ??eclipse的安装配置问题!??