【GD32F303红枫派开发板使用手册】第十七讲 USART-中断串口收发实验

发布者:BlossomWhisper最新更新时间:2024-12-13 来源: elecfans关键字:GD32F303  USART  中断  串口收发 手机看文章 扫描二维码
随时随地手机看文章

17.1实验内容

通过本实验主要学习以下内容:

  • 使用中断进行串口收发

17.2实验原理

前面章节中我们已经学习了串口的状态标志位,本实验就是使用TBE中断和RBNE中断来实现中断收发数据,实验原理是RBNE中断用来接受数据,IDLE中断用于判断发送方数据结束,TBE中断用于发送数据。

17.3硬件设计

本实验仍然使用USB转UART接口,硬件设计见前面章节。

17.4代码解析

17.4.1串口中断发送函数

在driver_uart.c中定义了串口中断发送函数:

C

Drv_Err driver_uart_int_transmit(typdef_uart_struct *uartx,uint8_t *pbuff,uint16_t length)

{

uint32_t timeout = driver_tick;

while(uartx->uart_control.Com_Flag.Bits.SendState==1){

if((timeout+UART_TIMEOUT_MS) <= driver_tick) {              

uartx->uart_control.Com_Flag.Bits.SendState=0;

return DRV_ERROR;

}

}


uartx->uart_control.Com_Flag.Bits.SendSucess=0;

uartx->uart_control.Com_Flag.Bits.SendState=1;

uartx->uart_control.p_Send=pbuff;

uartx->uart_control.SendSize=length;

uartx->uart_control.SendCount=0;


usart_flag_clear(uartx->uart_x,USART_FLAG_TC);

usart_interrupt_enable(uartx->uart_x,USART_INT_TBE);


return DRV_SUCCESS;

}

17.4.2串口中断接受函数


在driver_uart.c中定义了串口中断接受函数:


C

Drv_Err driver_uart_int_receive(typdef_uart_struct *uartx,uint8_t *pbuff,uint16_t length)

{

uint32_t timeout = driver_tick;

while(uartx->uart_control.Com_Flag.Bits.RecState==1){

if((timeout+UART_TIMEOUT_MS) <= driver_tick) {              

uartx->uart_control.Com_Flag.Bits.RecState=0;

return DRV_ERROR;

}

}


uartx->uart_control.Com_Flag.Bits.RecSuccess=0;

uartx->uart_control.Com_Flag.Bits.RecState=1;

uartx->uart_control.p_Rec=pbuff;

uartx->uart_control.RecSize=length;

uartx->uart_control.RecCount=0;


usart_flag_clear(uartx->uart_x,USART_FLAG_IDLE);

USART_STAT0(uartx->uart_x);

USART_DATA(uartx->uart_x);


usart_interrupt_enable(uartx->uart_x,USART_INT_RBNE);

usart_interrupt_enable(uartx->uart_x,USART_INT_IDLE);



return DRV_SUCCESS;

}

17.4.3main函数实现


以下为main函数代码:


C

int main(void)

{

delay_init();

//初始化UART为中断模式,注册接受完成(IDLE)回调函数

BOARD_UART.uart_mode_tx=MODE_INT;

BOARD_UART.uart_mode_rx=MODE_INT;

BOARD_UART.uart_idle_callback=user_receive_complete_callback;

bsp_uart_init(&BOARD_UART);

nvic_irq_enable(USART0_IRQn,2,0);

delay_ms(1000);

printf('uart interrupt mode sends and receives loopback packets of indefinite length.rn');

//配置UART接受,最长100byte

driver_uart_int_receive(&BOARD_UART,uart_rec_buff,100);

while (1)

{

//查询到接受完成回调函数标志

if(uart_receive_complete_flag==SET)

{

uart_receive_complete_flag=RESET;

//发送刚接受到的数据

driver_uart_int_transmit(&BOARD_UART,uart_rec_buff,uart_receive_count);

}

}

}

本例程main函数首先进行了延时函数初始化,再初始化UART为中断模式,接着配置串口BOARD_UART,开启串口中断NVIC,这里使用到了IDLE中断,TBE中断和RBNE中断,然后配置串口D中断接受,最长100个字节,所以我们可以给串口发送100个字节以下长度的数据。在while(1)循环中循环查询uart_receive_complete_flag标志位,当该标志位为“SET”时,表示IDLE中断被触发,一帧数据接受完,最后将接收到的帧数据通过中断发送方式原封不动发送到串口上。


17.4.4中断函数


本实验中中断函数和DMA串口收发实验用到的中断函数相同。


17.5实验结果


使用USB-TypeC线,连接电脑和板上USB to UART口后,使用串口调试助手发送一帧数据到MCU,MCU会将这帧数据回发到串口调试助手中。


wKgZomZCzhqAd1-uAAAEQNN_QRI502.png?imageView2/2/w/1000wKgZomZCziKAWcJsAAAIXPeWoWw536.png?imageView2/2/w/1000

关键字:GD32F303  USART  中断  串口收发 引用地址:【GD32F303红枫派开发板使用手册】第十七讲 USART-中断串口收发实验

上一篇:【GD32F303红枫派开发板使用手册】第十五讲 USART-printf打印实验
下一篇:【GD32F470紫藤派开发板使用手册】第七讲 FWDG-看门狗实验

推荐阅读最新更新时间:2026-03-25 10:48

GD32F303红枫开发板使用手册】第十五讲 USART-printf打印实验
15.1实验内容 通过本实验主要学习以下内容: 串口简介 GD32F303串口工作原理 使用printf打印信息 15.2实验原理 15.2.1串口简介 串口,从广义上看,指所有串行通信接口,比如RS232、RS422、RS485、SPI、IIC等。串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的通讯方式。和串行通讯相对应的是并行通讯,并行通信指一个传输接口可以传输8个bit即一个byte(有时甚至更多),虽然串行通信比并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。 对于GD32F303来说,串口一般特指USART(通用同步异步收发器 )和UART(通用异步收发器 )。USART/U
[单片机]
【<font color='red'>GD32F303</font><font color='red'>红枫</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第十五讲 <font color='red'>USART</font>-printf打印实验
GD32F303红枫开发板使用手册】第二十九讲 USB-IAP升级实验
29.1实验内容 通过本实验主要学习以下内容: USB IAP升级操作 29.2实验原理 USB IAP升级本例程中使用的是Custom HID中的IAP设备类,其设备类协议的实现与HID的类似,主要包括GET_REPORT/GET_IDLE/GET_PROTOCOL/SET_REPORT/SET_IDLE/SET_PROTOCOL/USB_GET_DESCRIPTOR等。IAP的功能为通过USB接口通信的方式对app端代码进行更新。 29.3硬件设计 USB虚拟键盘实验章节已介绍。 29.4代码解析 IAP主函数如下所示,开始主要为delay延迟配置以及按键配置,之后判断KEY1按键是否被按下,如果K
[单片机]
【<font color='red'>GD32F303</font><font color='red'>红枫</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第二十九讲 USB-IAP升级实验
GD32F303红枫开发板使用手册】第二讲 GPIO-流水灯实验
2.1实验内容 通过本实验主要学习以下内容: GPIO结构及原理; GPIO输出功能实现; LED驱动原理。 2.2实验原理 2.2.1GPIO外设原理 GD32F303系列MCU最多可支持112个通用I/O引脚(GPIO),分别为PA0 ~ PA15,PB0 ~ PB15,PC0 ~ PC15,PD0 ~ PD15,PE0 ~ PE15,PF0 ~ PF15和PG0 ~ PG15,各片上设备用其来实现逻辑输入/输出功能。每个GPIO端口有相关的控制和配置寄存器以满足特定应用的需求。 GPIO 端口和其他的备用功能(AFs)共用引脚,在特定的封装下获得最大的灵活性。GPIO引脚通过配置相关的寄存器可以用作备用功能输入/输出
[单片机]
【<font color='red'>GD32F303</font><font color='red'>红枫</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第二讲 GPIO-流水灯实验
初识stm32-----串口1的中断收发
stm32-----中断收发 #include stm32f10x.h #include usart.h void My_USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStrue; USART_InitTypeDef USART_InitStrue; NVIC_InitTypeDef NVIC_InitStrue; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//① RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); GPIO_InitStrue
[单片机]
STM32CubeMX串口空闲中断加DMA实现不定长度收发数据
这里教程是选择的STM32F407。STM32F103也测试过。 1.首先选择串口,选择异步通信。 2.添加DMA 3.打开中断 4.生成代码,生成代码选择了每个外设单独使用.c/.h 5.我使用的是Keil5。打开工程,首先注释掉dma.c里的DMA接收中断,因为不需要DMA接收中断,DMA发送中断是需要的。(dma.c) void MX_DMA_Init(void) { __HAL_RCC_DMA2_CLK_ENABLE(); HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 2, 0); HAL_NVIC_En
[单片机]
Stm32RS232串口通信——中断收发送数据
main.c配置: /* *说明: *PA0:KEY1;PA1:KEY2; *PA2:LED1;PA3:LED2; *PA9:USART1_TX;PA10:USART1_RX */ #include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_exti.h #include system_stm32f10x.h #include misc.h void RCC_Configurati
[单片机]
Stm32使用Usart代码例子(轮询、中断、DMA)
stm32使用库函数编写USART还是很方便的,现在转几个例子: /*************************************** 转载请注明出处:tedeum.iteye.com ****************************************/ 首先是不使用中断的方法使用usart1,管脚pa9,pa10,此方法已在f3discovery上验证通过,来源:https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunitie
[单片机]
AVR USART(UART)接收中断程序
系统功能 使用AVR的USART进行自发自收(将发送引脚RXD短接到接收引脚TXD),发出数据:0,1,2。。。数据,能接收到自己发出的数据:0,1,2。。。使用LED作出简单指示! 硬件设计 AVR主控电路原理图 LED控制电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! //目标系统: 基于AVR单片机 //应用软件: ICC AVR /*01010101010101010101010101010101010101010101010101010101010101010101 ------------------------------------
[单片机]
AVR <font color='red'>USART</font>(UART)接收<font color='red'>中断</font>程序
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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