当前位置: 首页 > 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)——循环语句
  • 酶联免疫抗体试剂——博迈伦生物
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [Vue CLI 3] 配置解析之 css.extract
  • If…else
  • interface和setter,getter
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript设计模式之工厂模式
  • jquery cookie
  • Linux中的硬链接与软链接
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python打包系统简单入门
  • Spring Boot快速入门(一):Hello Spring Boot
  • SpringBoot几种定时任务的实现方式
  • 创建一种深思熟虑的文化
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 订阅Forge Viewer所有的事件
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 山寨一个 Promise
  • 用jquery写贪吃蛇
  • const的用法,特别是用在函数前面与后面的区别
  • !$boo在php中什么意思,php前戏
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)(1.11) SiK Radio v2(一)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (二)hibernate配置管理
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)视频码率,帧率和分辨率的联系与区别
  • .“空心村”成因分析及解决对策122344
  • .Net 4.0并行库实用性演练
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 指南:抽象化实现的基类
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • // an array of int
  • [16/N]论得趣