基于GD32F310使用串口的空闲中断完成不定长数据的接收

发布者:Serene123最新更新时间:2024-12-06 来源: elecfans关键字:串口  空闲中断  不定长数据 手机看文章 扫描二维码
随时随地手机看文章

我们在单片机开发中,经常会用到串口,这时候我可以通过使用DMA,减少CPU的占用。使用串口的空闲中断可以完成不定长数据的接受。所以本次我们从基础的外设移植开始完成此款板子的体验。

首先看下板子吧。

板子整体还是GD一贯风格,还是白色板子,这次由于芯片的管脚较小,目前所以引出方式变了。把可以用的IO都引出了。

本次我们使用串口0进行测试,此测试完成后我们也可以非常方便的移植到串口1上。

poYBAGM2iW6AAHsRAADNSwgMGd0509.png?imageView2/2/w/1000


我在其基础上移植了新的开发模板,主要导入我们的外设库和CMSIS库即可。例程上我使用了一个闪烁LED灯的例子。

poYBAGM2iZqAGEpwAAB3GUghSos588.png?imageView2/2/w/1000

主循环中我们就两个任务,一个是点灯,一个是完成串口接收和发送。

poYBAGM2ia6APWTtAACw_KOZcno967.png?imageView2/2/w/1000

在串口初始话的时候需要主要下,我们使能了串口的中断后,还需要打开其串口的空闲中断,不然进不了接受中断函数中。

pYYBAGM2icKAdKP7AACXFCN4b9Y355.png?imageView2/2/w/1000

中断函数中我们只需要完成中断服务函数的编写,进入串口接收空闲中断后,就让其使用DMA的方式接收处理数据。

串口发送结束后也会调用函数关闭其发送。

pYYBAGM2idmAZqOMAAFN5t34oFA139.png?imageView2/2/w/1000

效果就是只要我们数据在100字节以内都可以完成数据接受和发送。且长度可变。


关键字:串口  空闲中断  不定长数据 引用地址:基于GD32F310使用串口的空闲中断完成不定长数据的接收

上一篇:教你怎样在主控芯片GD32V上运行RT-Thread?
下一篇:GD32F310连接ESP8266实现远程灯控制

推荐阅读最新更新时间:2026-03-25 13:05

STM32F103串口DMA+空闲中断+多级缓冲实现不定长接收
文本提供的代码是基于STM32CubeMX生成的HAL库的。 STM32串口接收大体分为3种方式: 1、阻塞接收---HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); 2、中断接收---HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); 3、DMA接收---HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint
[单片机]
STM32单片机串口空闲中断+DMA接收不定长数据
在上一篇文章STM32单片机串口空闲中断接收不定长数据中介绍了利用串口空闲中断接收不定长数据,这种方式有一个问题就是串口每接收到一个字节就会进入一次中断,如果发送的数据比较频繁,那么串口中断就会不停打断主程序运行,影响系统运行。那么能不能在串口接收数据过程中不要每接收一个数据中断一次,只有在一帧数据接收结束完成后只中断一次? 用串口的空闲中断加上DMA功能,就可以实现每帧数据接收完成后只中断一次,而在数据接收过程中,由DMA存储串口接收到的每个字节。 关于串口的空闲检测和DMA在STM32参考手册中有详细介绍。 下面看如何初始化串口空闲中断和 DMA。 void uart2_init( u16 baud )
[单片机]
STM32单片机<font color='red'>串口</font><font color='red'>空闲</font><font color='red'>中断</font>+DMA接收不<font color='red'>定长</font><font color='red'>数据</font>
STM32CubeMX—串口空闲中断+DMA接收
一、实验说明 实验平台:STM32F103C8T6 实验内容:使用串口一空闲中断结合DMA 完成不定长数据接收 STM32的串口接收数据的方式 1、轮询接收 所谓轮询,就是在主函数中判断接收完成的标志位。举个不太恰当例子,就比如,此时你正在考试作弊,手机藏在兜里,你的队友再给你发答案,但是你的手机静音,所以你不得不写一会题看一会手机,有的时候答案已经发来了但是你此时在假装写,没有看,导致你没能及时看到答案浪费了时间(仅仅为了举例而已。。。。)。轮询接收数据也是这样。 2、中断接收 串口接收配置为中断模式,当有数据收到时,进入到串口接收中断中读取数据。继续上面的例子(你为了不浪费时间且及时抄到答案,你把手机开了震动,消息
[单片机]
STM32CubeMX—<font color='red'>串口</font><font color='red'>空闲</font><font color='red'>中断</font>+DMA接收
STM32 HAL库学习系列第10篇---串口空闲中断接收不定长数据
串口重定向配置: 可以直接复制使用 /************************************************* * 函数功能: 重定向c库函数printf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 * 说 明:无 */ int fputc(int ch, FILE *f) { HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch; } /** * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx * 输入参数: 无 * 返 回 值: 无 *
[单片机]
STM32的串口空闲中断接收不定长数据
最近想尝试STM32 通过DMA收发数据,网上找了不少参考文章,最后参考https://blog.csdn.net/youmeichifan/article/details/51750435?utm_source=dlogxgwz2 博文中的方法。 按照此文的方法实现了串口的收发,但是实际使用中发现: 接收空闲中断的产生是在数据接收停止一个字节时产生的,但是有时由于上位机编写问题或硬件问题(本人用到的USB转串口的硬件有问题)上位机发送数据不连续,中间有时间间隔大于一个字节,从而造成无法完整接收数据。通过对空闲中断接收数据方法的分析,重新修改代码,实现规定数据格式的不定长数据的接收。 主要实现方法: 1、定义通讯协
[单片机]
GD32F310开发板串口数据接收与数字自动转换
串口的功能网上有很多,但是处理串口的数据需要一些小手段,但是str的函数有点才长,不适用长的数据接收,所以给310搞一个接收数据的轻量级API的小玩意。 开发环境 Keil-MDK 5.34 Windows10 固件库-GD32F3x0_Firmware_Library_V2.2.0 新建工程就不赘述,看这个 启动串口 void uart_init(void) { //使能时钟 rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_USART0); //Tx PA9 复用推挽输出 gpio_mode_se
[单片机]
<font color='red'>GD32F310</font>开发板<font color='red'>串口</font>的<font color='red'>数据</font>接收与数字自动转换
STM32空闲中断+DMA解决接收不定长数据问题
串口的中断类型: #define USART_IT_PE ((uint16_t)0x0028) #define USART_IT_TXE ((uint16_t)0x0727) #define USART_IT_TC ((uint16_t)0x0626) #define USART_IT_RXNE ((uint16_t)0x0525) #define USART_IT_IDLE ((uint16_t)0x0424) #define USART_IT_LBD ((uint16_t)0
[单片机]
如何利用GD32F310读取HDC1080环境温湿度
我拿到的开发板实际板载的MCU是GD32F310G8,QFN28pin封装,基于ARM CORTEX M4内核,主频72MHz,芯片内置64KB flash,8KB SRAM,两路I2C外设。 本次试用目的是利用GD32F310的I2C0实现对HDC1080的初始化及读取环境温湿度,并利用UART口在电脑上显示出来。 1、新建工程 ①首先建立一个新的项目文件夹,并在此文件夹下建立对应子文件夹,我建立的文件如下图所示,这个依个人习惯会有不同: ② Document文件夹中存放对项目的说明文件readme.txt;将系统支持包中的GD32F3x0_Firmware_Library_V2.2.0/Firmware文件夹中的内容复
[单片机]
如何利用<font color='red'>GD32F310</font>读取HDC1080环境温湿度
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved