-
2022-04-26 09:55:10
本次是结合项目,来总结下在stm32CubeIDE开发环境下关于串口接收数据问题;
项目背景:利用MODBUS通讯协议
串口中断的流程为:
1.在main.c文件中对串口进行初始化操作MX_USART1_UART_Init(); MX_USART2_UART_Init();
2.对中断回调函数进行改写
void HAL_UART_RxCpltCallback( UART_HandleTypeDef *UartHandle )
记住在回调函数里要重新打开中断
本次项目中串口接收采取的是一个字节一个字节地接收,因为过程中数据的大小不是一成不变的。3.在正式程序中要对中断进行开启操作
更多相关内容 -
STM32串口中断接收发送数据
2018-07-11 10:31:03该程序编写了STM32F103三个串口初始化程序,可快速调用,同时支持接收和发送单个字符和多个字符,并存储数据,方便接收数据后的通信协议校验,支持自定义接收数据最大长度,重写printf函数。 -
STM32串口中断接收方式详细比较
2020-07-20 00:00:18本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机,具体下面详谈 -
STM32串口中断接收(HAL库)
2018-09-10 20:18:10简介:STM32与上位机之间用通信协议(自己定义)进行串口通信。怎么判断上位机发过来的指令是正确的,而不是一串乱码?怎么从正确的指令中提取出想要的命令代号,从而实现想要的功能? 方法:读取上位机发来的命令,... -
stm8s-串口中断接收_串口_stm8s_stm8s串口_中断_
2021-10-03 09:25:07基于stm8S系列单片机,实现中断方式的串口接收功能 -
STM32使用串口中断接收字符串.zip
2019-11-06 11:43:21STM32使用串口中断接收字符串,可重复接收,使用\r\n作为接收结束的标志,可以根据需要自定义结束的标志 -
stm32串口中断的接收
2022-03-26 10:41:39配置NVIC串口中断的结构体:中断的通道,配置抢占优先级和子优先级 使能CMD 结构体初始化 还有需要配置中断串口的配置: 串口 接收数据寄存器非空标志位 使能 在main函数中写中断接收函数 中断服务函数 { ...利用串口使得led点亮
利用之前的串口函数加上NVIC的中断函数结构体
定义结构体
定义 配置抢占优先级的组别
配置NVIC串口中断的结构体:中断的通道,配置抢占优先级和子优先级 使能CMD
结构体初始化
还有需要配置中断串口的配置: 串口 接收数据寄存器非空标志位 使能
在main函数中写中断接收函数
中断服务函数
{
判断得到标志位
创建变量接收数据
判断变量字符控制相应的数据
}
-
STM32串口空闲中断DMA接收不定长数据消息队列
2019-01-11 13:34:30STM32串口空闲中断DMA接收不定长数据消息队列。 串口1空闲中断+DMA,接收不定长数据 -
STM32-串口超时判断方式接收未知长度数据
2020-07-25 19:29:01本文给大家介绍了STM32-串口超时判断方式接收未知长度数据。 -
STM32串口中断接收一帧数据
2021-01-03 22:52:57STM32串口中断接收一帧数据 IDLE即串口空闲中断,串口收到一帧数据后,发生的中断。比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。因为只有接收...IDLE即串口空闲中断,串口收到一帧数据后,发生的中断。比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。因为只有接收到一帧数据以后,你才可以判断这次收了几个字节和每个字节的内容是否符合协议要求。STM32单片机带IDLE中断,一帧数据结束后,产生IDLE中断,利用这个中断来接收不定长的数。(产生IDLE中断后 以帧为单位进行判断)
如何配置IDLE中断?
RXNE中断和IDLE中断的区别
当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。
下面我们就配置好串口IDLE中断吧。/* 使能接收中断*/ USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); /* 使能空闲中断*/ USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); USART_Cmd(USART1, ENABLE); char i = 0; void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到一个字节 { ch[i++] = USART_ReceiveData(USART1); } else if(USART_GetITStatus(USART1,USART_IT_IDLE) != RESET)//接收到一帧数据 { USART1->SR;//先读SR USART1->DR;//再读DR i = 0; printf("%s",ch); } }
-
[笔记]STM32基于HAL库实现STM32串口中断接收数据
2021-06-29 23:29:29这里使用USART1串口 usart.c中添加 (1)添加全局变量 uint8_t USART1_Buff[100] = {0}; //接收帧缓存,自己定义大小 uint8_t USART1_STA = 0; bool USART1_Receive_Flag = false; uint8_t res = 0; (2)在MX...这里使用USART1串口
usart.c中添加
(1)添加全局变量
uint8_t USART1_Buff[100] = {0}; //接收帧缓存,自己定义大小 uint8_t USART1_STA = 0; bool USART1_Receive_Flag = false; uint8_t res = 0;
(2)在MX_USART1_UART_Init()最后添加
HAL_UART_Receive_IT(&huart1, &res, 1);
(3)在后面空白处添加
fputc是重定向,目的是将printf输出的目标改为usart1串口上
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart1.Instance == USART1) // 判断是由哪个串口触发的中断 { if((res == '\r' || res == '\n') && USART1_Receive_Flag == false) { USART1_Buff[USART1_STA] = 0; USART1_STA = 0; printf("buff = %s\r\n",USART1_Buff); USART1_Receive_Flag = true; } else if(USART1_Receive_Flag == false) { USART1_Buff[USART1_STA] = res; USART1_STA++; } HAL_UART_Receive_IT(&huart1,&res,1); // 重新使能串口1接收中断 } } #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF); return ch; }
在usart.h中添加
extern uint8_t USART1_Buff[100]; //接收帧缓存,自己定义大小 extern uint8_t USART1_STA; extern bool USART1_Receive_Flag;
在main.c中的死循环中添加
if(USART1_Receive_Flag == true) { printf("buff = %s\r\n",USART1_Buff); USART1_Receive_Flag = false; }
别忘了在main.h中添加
#include <stdio.h> #include <stdbool.h>
结果:
注意!!!:串口一使用的是'\r' || '\n'作为结束符,使用串口调试的时候记得“发送新行”,不然标志位会一直处于未接收完成的状态
-
STM32串口中断超时接收
2015-10-12 21:37:18STM32实现中断超时接收不定长度的数据,写入flash读出并返回 -
stm32f407_串口中断_stm32f407的串口中断_
2021-10-02 17:55:18使用stm32f407芯片,配置串口,串口中断,在中断服务程序中获取串口数据 -
STM32串口中断接收实验
2021-07-04 20:24:59STM32串口中断接收实验的详细说明准备代码实现总结 准备 材料:STM32F407ZGT6最小系统板,串口1通过跳线帽连接到了CH340上。 需求:从电脑向板子的串口1发送一个字符串(以回车和换行结尾,字符串末尾两个字符为0x0... -
STM32使用DMA加串口空闲中断接收数据
2020-08-04 06:56:15STM32中,需要用串口接收数据,是使用串口中断来接收数据。但是用这种方法的话,就要频繁进入串口中断,然后处理,效率就比较低。于是就想到用DMA来接收串口数据,这个STM32也是支持的。但是关键的一点,怎么知道... -
STM32串口中断接收HAL库超详解析
2021-11-19 16:52:28HAL库实现将接收逻辑全写在中断服务函数里面而不重定义回调函数,并且不会不进中断! -
STM32H7 串口 空闲中断 任意长接收 Hal库 IDLE
2021-01-06 05:32:50今天主要记录一下STM32H7系列串口的使用,正点原子、野火等各大家都有教程,当然用起来也没有问题。 解决方法后边有红色大字提醒,直接看后边就可以,如果你没有时间想去了解HAL库的接收思想。 ST推的HAL库,在整个... -
STM32串口中断接收方式.docx
2018-05-27 11:12:33STM32串口中断接收方式对于初学者有一定帮助STM32串口中断是最简单的 -
STM32F103单片机利用串口空闲中断接收不定长数据
2020-10-15 09:07:39在STM32F103C8T6单片机上,用串口2空闲中断,接收不定长数据。 -
STM32串口接收字符串
2020-11-30 16:30:38该程序实现了串口1中断接收字符串(必须有换行符结尾,即勾选上串口调试助手上的“换行符”再发送)。方式完毕后,通过按键(GPIO)的方式再将接收的字符串发送出来。每次接收都会更新发送。字符串缓冲区设为20(可... -
stm32串口中断接收一帧数据
2017-02-18 17:11:53最近用到stm32的串口,中断一个字符一个字符接收好心累,网上度了一下发现了一篇好的帖子,和大家分享一下,原贴地址:http://www.51hei.com/bbs/dpj-39885-1.html 再次感谢原贴楼主的分享,为了方便大家,我把原文... -
STM32 L053串口中断接收不定长数据DMA发送数据
2019-01-25 16:49:02stm32L053 低功耗设计开发MCU,使用STM32 官方的驱动库HAL,采用串口中断接收方式,接收不定长数据,发送则采用DMA发送,项目中稳定使用的USART驱动方式。 -
STM32串口中断接收和中断发送
2016-03-12 15:12:14STM32串口USART1中断接收和中断发送 先贴出中断函数: void USART1_IRQHandler(void){ if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART1, USART_IT_RX -
STM32 串口 空闲中断使用
2021-01-06 03:46:42查资料过程中发现了串口空闲中断,故想空闲中断来接收串口数据帧。以下是空闲中断的参考demo: 主函数 main.c /** ****************************************************************************** * @file -
STM32 HAL库串口+DMA空闲中断接收不定长数据
2020-11-04 17:36:36STM32 HAL库+串口DMA+空闲中断(IDLE)实现不定长数据接收,可以用来参考学习使用,简单易懂。 -
stm32串口使用以及串口中断接收不定长度字符串
2022-03-25 18:59:29开始使用cubemx配置PA9,PA10分别为TX,RX端,在使能串口中断 之后其余值直接使用默认的就可以了 点击生成代码即可 uint8_t rx_buff[1];//储存单个字符 uint8_t rx_data[100];//不定长字符串接受缓冲区 _Bool rx_Flag... -
STM32串口连续接收一帧数据
2015-08-31 08:26:49STM32串口接收一帧数据的写法,数据包括帧头,功能帧,数据帧,校验位! -
STM32串口空闲中断接收数据方法
2021-08-17 17:10:47// 串口中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 抢占 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ... -
stm32串口空闲中断接收不定长数据
2021-11-19 16:38:14串口空闲中断加DMA方式接收 在串口初始化时开启空闲中断和DMA接收 void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) { /*省略自动生成部分代码*/ /* USER CODE BEGIN USART1_MspInit 1 */ __HAL_UART_... -
hal库实现stm32串口中断接收数据
2020-12-01 14:14:21先设置并开启串口中断接收 该函数功能为开启串口接收中断,并指定存储接收数据的缓存区,设置从串口接收的数据大小。这里要特别注意,该函数只有从串口接收到Size个数据后才会返回,不然会阻塞。 HAL_UART_Receive_...