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

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

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

  1. GPIO_InitTypeDef GPIO_InitStructure;

  2. NVIC_InitTypeDef NVIC_InitStructure;

  3. USART_InitTypeDef USART_InitStructure;

  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);

  5. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);

  6. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//TX

  7. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

  8. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

  9. GPIO_Init(GPIOB,&GPIO_InitStructure);

  10. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;

  11. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//RX

  12. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

  13. GPIO_Init(GPIOB,&GPIO_InitStructure);

  14. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  15. NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

  16. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

  17. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  18. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  19. NVIC_Init(&NVIC_InitStructure);

  20. USART_InitStructure.USART_BaudRate=2400;

  21. USART_InitStructure.USART_WordLength=USART_WordLength_8b;

  22. USART_InitStructure.USART_StopBits=USART_StopBits_1;

  23. USART_InitStructure.USART_Parity=USART_Parity_No;

  24. USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

  25. USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

  26. USART_Init(USART3,&USART_InitStructure);

  27. USART_Cmd(USART3, ENABLE);

  28. USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

  29. USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);

USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

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

USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);

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

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

第二步:写中断处理函数

  1. void USART3_IRQHandler(void)

  2. {

  3. u8 clear=clear;

  4. USART_ClearFlag(USART3,USART_FLAG_TC);

  5. if(USART_GetITStatus(USART3,USART_IT_RXNE)!=Bit_RESET)

  6. {

  7. rece_buffer[RxCounter++]=USART3->DR;

  8. }

  9. else if(USART_GetFlagStatus(USART3,USART_FLAG_IDLE)!=Bit_RESET)

  10. {

  11. clear=USART3->SR;

  12. clear=USART3->DR;

  13. RxCounter=0;

  14. }

  15. }

至此串口配置完成,程序运行时,只需要将配置串口函数放到主函数中,当串口发来一帧数据后即可将所有数据存到接受缓冲数组中!

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

  1. 关于STM32串口3的使用,接收并解析一帧数据

    关于STM32串口3的使用,接收并解析一帧数据 当stm32的串口1被使用时,我们可以使用其他串口来使用. 步骤: 串口3定义.初始化: 串口3中断服务函数(接收的一帧数据并判断是否正确): 主函数使 ...

  2. STM32串口读取一帧数据USART_IT_IDLE

    stm32 串口读取数据中断 USART_IT_RXNE:读取到一个数据产生中断 USART_IT_IDLE:读取到一帧数据产生中断 以前串口读取一帧数据的方法:收到数据后重置定时器的值,等到定时器超 ...

  3. 嵌入式作业STM32采用串口DMA方式发送数据

    目录 前言 要求 一.DMA的基本介绍 DMA的基本定义 DMA的主要特征 STM32F411x系列芯片DMA控制器 二.通过CubeMX配置项目 1.创建项目 2.选择芯片STM32F103C8T6 ...

  4. 工程思想——关于串口通讯协议帧数据的一些想法

    前言:之前在学校上计算机网络这门课程时候,被里面的各种协议绕的头晕眼花,总以为这些协议都已经被前辈固定,后生们只要按照之前的协议老老实实收发数据就能解决一切,直到自己也有做东西时要自己编写通讯协议时, ...

  5. STM32使用串口DMA方式发送数据

    1.cubemx设置 1.1基本设置 1.2 打开DMA和中断 2.代码实现 HAL_UART_Transmit_DMA(&huart1,(uint8_t*)str,strlen(str)); ...

  6. 4.4 使用STM32控制MC20进行GPS帧数据解析

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  7. MJKDZ PS2手柄控制OskarBot小车(三):STM32接收无线串口模块的数据并处理

    MJKDZ PS2手柄控制OskarBot小车(三):无线串口模块接收数据并处理 [目录] 1.硬件与软件设计思路 - 1.1 硬件资源 - 1.2 STM32串口接收数据的方法 2.源代码详解 - ...

  8. STM32使用串口IDLE中断的两种接收不定长数据的方式

    现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE中断一次只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE空闲中断的方式接收一帧数据,方法如下: 方法1: ...

  9. STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式)

    STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式) 前言 串口空闲中断介绍 清中断方法 串口中断处理函数 串口中断用到的全局变量定义 串口初始化(使能接收中 ...

最新文章

  1. MySQL Processlist--常见线程状态
  2. jQuery的属性操作
  3. linux基础服务,Linux基础
  4. 奉献一个窗口置顶的小工具
  5. 51单片机计算器_基于51单片机的倒计时温度检测报警器
  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)
  7. 线性代数及其应用:绪论
  8. 用c语言在Clion平台编写system(“cls“)清屏函数无效甚至异常解决方法。
  9. 计算机硬盘容量的最小单位,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
  10. 国家气象数据中心网站
  11. SVN相关问题(svn:E175002错误)的解决方案
  12. 使用Spring Cache设置缓存条件
  13. 热重启golang服务器(graceful restart golang http server)
  14. 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
  15. zlog日志系统开发中遇到的问题(2)
  16. oracle时间平均,Oracle SQL的平均时间
  17. 爱情保卫战经典语录全集
  18. 华为od机考真题-特殊计算
  19. android twrp_如何将TWRP恢复环境刷新到Android手机
  20. 学是计算机审计的心得感受,计算机审计心得体会

热门文章

  1. Envoy为什么能战胜Ngnix——线程模型分析篇
  2. Redis:master/slave、sentinel、Cluster简单总结
  3. 使用Intellij Idea 创建一个Web项目!
  4. 怎么用计算机的计算器转换进位制,计算器如何进行数值间的转换?
  5. 中国证券期货业南方信息技术中心二期约1.5万个机柜建设项目EPC总包定了!
  6. 正宁天气预报软件测试,正宁天气预报15天
  7. 成功解决Eclipse打开py等文件出现乱码
  8. 成功解决⑧NVIDIA安装程序无法继续 此NVIDL驱动程序与此Windows版本不兼容。 此图形驱动程序无法找到兼吝的图形硬件。
  9. DL之ResNeXt:ResNeXt算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  10. DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(六)