教你使用stm32接收串口的一帧数据!

2023-05-16

stm32支持接受单个数据或者一帧数据,若配置单个数据接收中断的话,会出现接收包丢包,数据不完整的情况!因此在stm32的串口中断中,还有一个IDLE中断,用来产生串口接受一帧数据而产生的中断,比如说串口发来n个数据,会产生n次接收中断和一次IDLE中断,因此方便使用者来接收主机发送或者从机返回的数据!若想发送一帧数据到串口请参照我博客中的另一篇文章——教你如何使用stm32发送一帧数据! 为了方便大家移植,提醒大家此次代码中的代码不需要任何修改,只需要复制粘贴即可!

第一步:首先配置串口中断!

我配置的是串口3,可根据自己的使用情况更改配置。需要更改的地方:时 钟RCC,GPIO_PIN,中断入口,将所   有的USART3改为你配置的串口即可)

	GPIO_InitTypeDef GPIO_InitStructure;	
	NVIC_InitTypeDef NVIC_InitStructure;	
	USART_InitTypeDef  USART_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//TX
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//RX
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
 

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 
	NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; 
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
	NVIC_Init(&NVIC_InitStructure);


	USART_InitStructure.USART_BaudRate=2400;   
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;
	USART_InitStructure.USART_StopBits=USART_StopBits_1;
	USART_InitStructure.USART_Parity=USART_Parity_No;
	USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART_Init(USART3,&USART_InitStructure);
	USART_Cmd(USART3, ENABLE);
	USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
	USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

重要提醒:这句话是打开串口接受中断。每收到一个字节进入一次中断!

USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);

重要提醒:这句话是打开串口接受一帧数据中断。每收到一帧数据进入一次中断!

至此,串口配置完成,下面进入中断入口函数中!

第二步:写中断处理函数

void USART3_IRQHandler(void)	
{
	 u8 clear=clear;
	 USART_ClearFlag(USART3,USART_FLAG_TC);

	 if(USART_GetITStatus(USART3,USART_IT_RXNE)!=Bit_RESET)        
	   {

           rece_buffer[RxCounter++]=USART3->DR;
	   }
		 
	 else if(USART_GetFlagStatus(USART3,USART_FLAG_IDLE)!=Bit_RESET)
	        {					
                clear=USART3->SR;
                clear=USART3->DR;						
	        RxCounter=0;
                }	
					
}
至此串口配置完成,程序运行时,只需要将配置串口函数放到主函数中,当串口发来一帧数据后即可将所有数据存到 接受缓冲数组中!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你使用stm32接收串口的一帧数据! 的相关文章

  • 使用github构建自己的博客

    背景 xff1a 某天偶然下看到同事的博客 xff0c 顿时被吸引了 xff0c 突然很想有一个自己的酷炫的博客 xff0c 就是那种光是背景就能玩一天的博客 xff08 好吧 xff0c 就是觉得好看 xff09 刚好昨天项目上线了 xf

随机推荐

  • 学习笔记(1):自己动手从0到1写嵌入式操作系统-C2.02 任务切换的实现

    立即学习 https edu csdn net course play 4605 82626 utm source 61 blogtoedu 解决了栈冲突的问题 为每个任务独立分配栈 在发生异常的时候 xff1a CPU会自动保存 xPSR
  • CLion 控制台输出中文乱码的解决方法

    照着这篇中的做即可 xff0c 亲测有效 xff1a CLion 控制台输出中文乱码 简书
  • Apollo 自动驾驶工程 x86迁移到ARM ORIN

    概述 最近工作主要关于自动驾驶工程跨平台迁移 xff0c 从原来的X86架构工控机形式迁移到英伟达Orin Soc xff0c 由于Orin是ARM以及这个嵌入式平台的内核是定制的 xff0c 所以遇到了很多问题 xff0c 这里分享出来
  • 在CentOS上安装 Docker

    官方网站安装教程 https docs docker com engine install centos sudo docker 是以管理员模式运行 卸载旧版本 sudo yum remove docker docker client do
  • 多线程的优点和缺点?什么场景适合使用多线程?

    由于多线程应用程序将程序划分成多个独立的任务 xff0c 因此可以在以下方面显著提高性能 xff1a 1 多线程技术使程序的响应速度更快 xff0c 因为用户界面可以在进行其它工作的同时一直处于活动状态 2 当前空闲的任务可以将处理器时间让
  • 相机内参和畸变参数进行校正程序

    当相机校正完成后 xff0c 会得到相机的外参 内参 畸变参数 通过内参和畸变参数可以得到相机校正后的图像 两种方法 xff0c 程序如下 xff1a include lt opencv2 opencv hpp gt include lt
  • (根据关键词)查找论文的一些途径

    以下方式都是在查找机器学习 深度学习相关的论文而发现的 目录 一 https arxiv org search cs 二 semanticscholar xff1a https www semanticscholar org search
  • Detected problems with api compatibility

    今天遇到了这个问题 xff0c 看来还是不要升到Android9 0了 xff01 待测试 xff1a https www cnblogs com qinxiaofei p 10075320 html
  • 在 Win10 系统下安装 JDK 及配置环境变量的方法

    首先 xff0c 在官网下载 JDK xff1a Oracle 官网 如上图所示 xff0c 在 Oracle 官网下载 JDK xff0c 有一点需要注意 xff0c 那就是在我们下载合适的 JDK 之前 xff0c 需要先点击 标记 1
  • APM 路径规划笔记

    20180711 xff1a 类名 xff1a AC WPNav 功能 xff1a 完成Auto Loiter Abmode模式中的路径规划 为计算方便设置默认值 xff0c 实际值有可能又变化 wp accel cms 61 100 wp
  • 程序员5大热门发展行业,就业迷茫的同学注意啦!

    信息化时代 xff0c 程序员成为各行业中的香饽饽岗位 xff0c 发展空间大 xff0c 薪资福利高 xff0c 因此最近几年转向程序员岗位的小伙伴越来越多 xff0c 不过因为这种 青睐 xff0c 使得程序员岗的竞争也越发大了 xff
  • Jetson TX2 初体验

    阅读原文请点击 摘要 xff1a 0 简介 Jetson TX2 1 是基于 NVIDIA Pascal 架构的 AI 单模块超级计算机 xff0c 性能强大 xff08 1 TFLOPS xff09 xff0c 外形小巧 xff0c 节能
  • 写毕业论文期间的一些收获和感想

    已经有好几天没有学Python了 xff0c 这几天一直在赶论文的进度 xff0c 虽然说拖延症害死人 xff0c 但毕竟写论文这件事在我心里的重要性实在无法排到很靠前的位置 xff0c 造成这些日子突击写论文的结果也是情理之中吧 而在写论
  • C/C++Linux服务器开发/后台架构师知识体系整理

    1 xff1a 精进基石 1 1 数据结构与算法 1 1 1 随处可见的红黑树 红黑树的应用场景 进程调度cfs xff0c 内存管理 红黑树的数学证明与推导 手撕红黑树的左旋与右旋 红黑树添加的实现与添加三种情况的证明 红黑树删除的实现与
  • Java 进口管制限制解除

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 由于国外的进出口限制 xff0c 对Java密码算法体系进行了一些限制 xff0c 为了解除限制 x
  • turtlebot3仿真例子(二)----SLAM仿真实现

    turtlebot3地图构建 1 启动turtlebot3的world xff1a roslaunch turtlebot3 gazebo turtlebot3 world launch 2 启动slam导航包并配置方法 xff1a Kar
  • ros 节点话题重映射和命名空间(以turtlesim为例)

    由于ROS必须有唯一的名称 xff0c 不论是节点还是话题都是如此 xff0c 简单地两次执行相关节点将导致之前执行的节点终止 但是我们可以在运行时更改节点的名称 xff0c 而不需要运行额外的程序或更改源代码 方法包括命名空间 names
  • Markdown中插入图片

    前言 xff1a 企业中产品手册少不了图片的插入 xff0c 那如果用markdown维护手册的话 xff0c 怎么插入图片呢 xff1f 今天介绍以下几种方法 xff1a xff08 一 xff09 插入本地图片 xff08 二 xff0
  • 通过VScode进行git的版本管理

    前言 xff1a 作为测试 xff0c 我们写的自动化脚本和产品手册也是需要使用git进行版本管理起来的 xff0c 本次我们介绍怎么通过git进行版本管理 目录 xff08 一 xff09 搭建本地仓库 xff08 二 xff09 将服务
  • 教你使用stm32接收串口的一帧数据!

    stm32支持接受单个数据或者一帧数据 xff0c 若配置单个数据接收中断的话 xff0c 会出现接收包丢包 xff0c 数据不完整的情况 xff01 因此在stm32的串口中断中 xff0c 还有一个IDLE中断 xff0c 用来产生串口