【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.3 main函数实现

以下为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.\r\n"); //配置UART接受,最长100bytedriver_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会将这帧数据回发到串口调试助手中。

由聚沃科技原创,来源于【红枫派开发板】第十七讲 USART-中断串口收发实验 - 苏州聚沃电子科技有限公司 (gd32bbs.com) 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录第一次edusrc挖掘

文章目录 一、前言二、漏洞说明截止目前已修复 一、前言 edusrc平台介绍 我们可以在关于页面看到edusrc的收录规则 现阶段&#xff0c;教育行业漏洞报告平台接收如下类别单位漏洞&#xff1a; 教育部 各省、自治区教育厅、直辖市教委、各级教育局 学校 教育相关软件 可以看到…

基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真&#xff0c;使用MATLAB编程实现&#xff0c;包括FOC控制器&#xff0c;clark&#xff0c;park等&#xff0c;不使用…

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本…

linux下的进程通讯

一. 实验内容 1&#xff0e;编写一个程序&#xff0c;实现在两个进程之间运用管道进行通讯。程序中创建一个子进程&#xff0c;然后父、子进程各自独立运行。父进程不断地在标准输入设备上读入小写字母&#xff0c;写入管道。子进程不断地从管道中读取字符&#xff0c;转换为大…

充电宝什么牌子耐用?2024年四大品牌推荐!这四款值得入!

在现代生活中&#xff0c;充电宝已经成为我们日常必备的数码配件之一。无论是旅行、出差还是日常通勤&#xff0c;拥有一款耐用且高效的充电宝&#xff0c;能够为我们的电子设备提供源源不断的电力支持。然而&#xff0c;市场上充电宝品牌众多&#xff0c;质量参差不齐&#xf…

深入理解 Java 中的 volatile 关键字

暮色四合&#xff0c;晚风轻拂&#xff0c;湖面上泛起点点波光&#xff0c;宛如撒下了一片星河。 文章目录 前言一、CPU 三级缓存二、JMM三、并发编程正确性的基础四、volatile 关键字五、volatile 可见性六、volatile 有序性6.1 指令重排序6.2 volatile 禁止指令重排6.3 vola…

如何区分人工智能生成的图像与真实照片(下)

4 功能上的不合理性 AI 生成的图像往往会因为缺乏对现实世界物体结构和相互作用的了解&#xff0c;而产生各种功能不合理之处。这些不合理之处主要表现在以下几个方面&#xff1a; 4.1 构图不合理 物体关系不合逻辑: AI 生成的图像中&#xff0c;物体和人物之间的关系可能不符…

python3GUI--记账助手By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;开发环境三&#xff0e;预览1.登录&注册2.主界面3.新增账单1.当前日期2.选择日期3.添加成功 4.删除账单4.筛选账单5.账单数据汇总1.日账单2.月账单3.年账单 四&#xff0e;设计心得1.项目代码结构2.UI设计概览3.UI设计详细1.登录…

人员的社保缴纳情况直接影响设计资质的延续结果。

是的&#xff0c;人员的社保缴纳情况会直接影响设计资质的延续结果。社保缴纳情况是评估企业运营稳定性和合规性的重要指标之一&#xff0c;特别是在设计资质延续的审核过程中。 设计资质延续时&#xff0c;相关部门会要求企业提供涉及资质延续所需人员的社保缴纳证明&#xff…

kettle学习(利用jsonPath定位,json文件转换)

kettle学习&#xff08;利用jsonPath定位&#xff0c;json文件转换&#xff09; 于数据处理的广袤天地间&#xff0c;我们时常需应对各类繁杂状况与各式格式。Kettle 作为极具威力的数据集成利器&#xff0c;赋予了我们诸多功能与无限可能此次博客里&#xff0c;我们将重点投向…

如何在电磁仿真软件CST中获得多天线同频的SAR

上期介绍了多天线不同频率情况下如何计算SAR&#xff0c;不用考虑相位差&#xff1b;这期我们看看MIMO&#xff0c;多天线同频&#xff0c;考虑相位差&#xff1a; 简单模型&#xff0c;一只手和两个天线&#xff1a; 工作频率2GHz&#xff1a; 仿真结束查看S11&#xff1a; 查…

KEPServerEX远程配置功能一键Get

远程配置功能&#xff0c;其实是通过KEPServerEX REST 接口及 HTTP 协议命令&#xff0c;对 KEPServerEX Runtime 运行环境进行配置的查询及更改。 右键点击系统托盘处的KEPServerEX Administration 图标&#xff0c;选择Settings | Configuration API Service; 如图设置&…

Windows WPS ppt幻灯片 保存文件时候 PPT文件大小变大 ppt文件太大 解决方案

Windows WPS ppt 幻灯片 保存文件时候 PPT文件大小突然变大&#xff0c;原先只有10M的大小增加到40M 关于wps的ppt文件变大&#xff0c;指的是&#xff1a;明明ppt幻灯片页数和图片都不多&#xff0c;只是稍微修改两个文字&#xff0c;保存时&#xff0c;文件大小增加了不少&a…

android studio CreateProcess error=2, 系统找不到指定的文件

【问题记录篇】 在AndroidStudio编译开发jni相关工程代码的时候&#xff0c;编译遇到的这个报错&#xff1a; CreateProcess error2, 系统找不到指定的文件。排查处理步骤: 先查看Build Output的具体日志输出 2.了解到问题出在了NDK配置上&#xff0c;此时需要根据自己的gra…

模型算法—线性回归

线性回归是统计学中最常见的一种回归分析方法&#xff0c;用于建立自变量&#xff08;解释变量&#xff09;和因变量&#xff08;响应变量&#xff09;之间的线性关系。线性回归模型可以用来预测一个或多个自变量对应的因变量的值。 线性回归的基本形式如下&#xff1a; &…

【ElasticSearch】ElasticSearch基本概念

ES 是一个开源的高扩展的分布式全文检索引擎&#xff0c;它是对开源库 Luence 的封装&#xff0c;提供 REST API 接口 MySQL 更适合数据的存储和关系管理&#xff0c;即 CRUD&#xff1b;而 ES 更适合做海量数据的检索和分析&#xff0c;它可以秒级地从数据库中检索出我们感兴…

SSH概念、用途、详细使用方法

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Excel中多条件判断公式怎么写?

在Excel里&#xff0c;这种情况下的公式怎么写呢&#xff1f; 本题有两个判断条件&#xff0c;按照题设&#xff0c;用IF函数就可以了&#xff0c;这样查看公式时逻辑比较直观&#xff1a; IF(A2>80%, 4, IF(A2>30%, 8*(A2-30%),0)) 用IF函数写公式&#xff0c;特别是当…

【Java】已解决java.lang.ArrayIndexOutOfBoundsException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.ArrayIndexOutOfBoundsException异常 一、问题背景 java.lang.ArrayIndexOutOfBoundsException 是 Java 中一个非常常见的运行时异常&#xff0c;它表明程序试图访问数…

C语言入门系列:流程控制

一&#xff0c;C代码执行顺序 默认情况下&#xff0c;C语言程序从main()函数开始执行&#xff0c;随后按源代码中语句出现的顺序逐一执行。 这意味着&#xff0c;如果不考虑任何控制结构&#xff0c;程序会自上而下&#xff0c;逐行执行每条语句&#xff0c;直到遇到函数调用…