教你使用stm32接收串口的一帧数据!
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;
}
}
至此串口配置完成,程序运行时,只需要将配置串口函数放到主函数中,当串口发来一帧数据后即可将所有数据存到接受缓冲数组中!
教你使用stm32接收串口的一帧数据!相关推荐
- 关于STM32串口3的使用,接收并解析一帧数据
关于STM32串口3的使用,接收并解析一帧数据 当stm32的串口1被使用时,我们可以使用其他串口来使用. 步骤: 串口3定义.初始化: 串口3中断服务函数(接收的一帧数据并判断是否正确): 主函数使 ...
- STM32串口读取一帧数据USART_IT_IDLE
stm32 串口读取数据中断 USART_IT_RXNE:读取到一个数据产生中断 USART_IT_IDLE:读取到一帧数据产生中断 以前串口读取一帧数据的方法:收到数据后重置定时器的值,等到定时器超 ...
- 嵌入式作业STM32采用串口DMA方式发送数据
目录 前言 要求 一.DMA的基本介绍 DMA的基本定义 DMA的主要特征 STM32F411x系列芯片DMA控制器 二.通过CubeMX配置项目 1.创建项目 2.选择芯片STM32F103C8T6 ...
- 工程思想——关于串口通讯协议帧数据的一些想法
前言:之前在学校上计算机网络这门课程时候,被里面的各种协议绕的头晕眼花,总以为这些协议都已经被前辈固定,后生们只要按照之前的协议老老实实收发数据就能解决一切,直到自己也有做东西时要自己编写通讯协议时, ...
- STM32使用串口DMA方式发送数据
1.cubemx设置 1.1基本设置 1.2 打开DMA和中断 2.代码实现 HAL_UART_Transmit_DMA(&huart1,(uint8_t*)str,strlen(str)); ...
- 4.4 使用STM32控制MC20进行GPS帧数据解析
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- MJKDZ PS2手柄控制OskarBot小车(三):STM32接收无线串口模块的数据并处理
MJKDZ PS2手柄控制OskarBot小车(三):无线串口模块接收数据并处理 [目录] 1.硬件与软件设计思路 - 1.1 硬件资源 - 1.2 STM32串口接收数据的方法 2.源代码详解 - ...
- STM32使用串口IDLE中断的两种接收不定长数据的方式
现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE中断一次只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE空闲中断的方式接收一帧数据,方法如下: 方法1: ...
- STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式)
STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式) 前言 串口空闲中断介绍 清中断方法 串口中断处理函数 串口中断用到的全局变量定义 串口初始化(使能接收中 ...
最新文章
- MySQL Processlist--常见线程状态
- jQuery的属性操作
- linux基础服务,Linux基础
- 奉献一个窗口置顶的小工具
- 51单片机计算器_基于51单片机的倒计时温度检测报警器
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)
- 线性代数及其应用:绪论
- 用c语言在Clion平台编写system(“cls“)清屏函数无效甚至异常解决方法。
- 计算机硬盘容量的最小单位,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
- 国家气象数据中心网站
- SVN相关问题(svn:E175002错误)的解决方案
- 使用Spring Cache设置缓存条件
- 热重启golang服务器(graceful restart golang http server)
- 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
- zlog日志系统开发中遇到的问题(2)
- oracle时间平均,Oracle SQL的平均时间
- 爱情保卫战经典语录全集
- 华为od机考真题-特殊计算
- android twrp_如何将TWRP恢复环境刷新到Android手机
- 学是计算机审计的心得感受,计算机审计心得体会
热门文章
- Envoy为什么能战胜Ngnix——线程模型分析篇
- Redis:master/slave、sentinel、Cluster简单总结
- 使用Intellij Idea 创建一个Web项目!
- 怎么用计算机的计算器转换进位制,计算器如何进行数值间的转换?
- 中国证券期货业南方信息技术中心二期约1.5万个机柜建设项目EPC总包定了!
- 正宁天气预报软件测试,正宁天气预报15天
- 成功解决Eclipse打开py等文件出现乱码
- 成功解决⑧NVIDIA安装程序无法继续 此NVIDL驱动程序与此Windows版本不兼容。 此图形驱动程序无法找到兼吝的图形硬件。
- DL之ResNeXt:ResNeXt算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
- DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(六)