中断模式串口
串口数据的发送接收可以藉由串口发送中断、接收中断实现。串口发送中断、接收中断可以同时开启。UART发送中断可以分为两种UART发送缓冲区为空中断数据从UART引脚发送出去中断。串口中断模式参见FM33L023D串口中断例程该例程在初始化阶段开启UART0发送、接收中断串口0收到数据后会进入串口中断服务处理程序。串口发送中断、接收中断共用一个中断服务处理程序发送中断触发需要修改中断服务例程。串口中断操作相对于轮询方式操作更复杂。开发者需要先配置串口功能再开启总中断开启UART发送中断、接收中断。中断使能串口中断例程先设置中断触发模式串口发送中断选择BUFFER空且移位寄存器空相对于串口发送缓冲区为空这种模式触发时机晚以前用STM32系列芯片好像没有注意到这个细节。针对这个问题官方论坛有给出明确解释。请问FM33LC0xx系列LPUART发送中断TXBE和TXSE的区别是什么 - FM33LC0xx系列 - 低功耗嵌入式软件开发者论坛 - Powered by Discuz! Archiverhttps://www.fmdevelopers.com.cn/archiver/?tid-1146.htmldeepseek针对这两种模式给出了使用场景我就直接搬运了。追求最高发送吞吐量使用TXE/THRE如果需要连续、大量地发送数据且对CPU效率要求高通常建议使用仅“发送缓冲区空”中断。因为可以在上一个字节还在“路上”移位发送时CPU就提前把下一个字节填入缓冲区充分利用硬件流水线实现最高效的连续发送中间几乎没有空闲间隔。需要精确控制RS485收发切换或流控使用TC如果涉及RS485通信需要在发送完成后立即释放总线将RE/DE引脚拉低或者在半双工模式下切换方向必须使用“BUFFER空且移位寄存器空”中断即发送完成中断。只有在TC标志置位时才能确保总线上所有数据已发送完毕此时切换收发状态才安全否则会造成数据丢失或总线冲突。接收中断选择接收缓冲区满而不是数据接收完成产生中断。接收缓冲区即RXREG寄存器有效长度1Byte接收1Byte触发一次中断这是最常见的模式。数据接收完成更像是一帧接收完成触发一次中断。前者更常见后者估计还要配置数据帧格式帧头、帧尾、校验和等暂时没看到明确的解释。接着通过FL_NVIC_Init函数设置中断优先级底层实际调用NVIC库函数。接着就是配置UARTIE寄存器使能发送中断、接收中断。FL_UART_SetTxInterruptSelect(UART0, FL_UART_INTSEL_TXBE_TXSE); //发生中断选择BUFFER空且移位寄存器空 FL_UART_SetRxInterruptSelect(UART0, FL_UART_INTSEL_RX_FULL); //接收Buffer满中断 InterruptConfigStruct.preemptPriority 0x02; FL_NVIC_Init(InterruptConfigStruct, UART0_IRQn); FL_UART_ClearFlag_TXIF(UART0); FL_UART_ClearFlag_RXIF(UART0); FL_UART_EnableIT_TXIE(UART0); FL_UART_EnableIT_RXIE(UART0); /** * brief Configure NVIC for specified Interrupt. * param configStruct NVIC configuration. * param irq Interrupt number. * retval None */ void FL_NVIC_Init(FL_NVIC_ConfigTypeDef *configStruct, IRQn_Type irq) { /* Check parameter */ if(configStruct-preemptPriority 3) { configStruct-preemptPriority 3; } NVIC_DisableIRQ(irq); NVIC_ClearPendingIRQ(irq); NVIC_SetPriority(irq, configStruct-preemptPriority); NVIC_EnableIRQ(irq); }中断接收中断接收功能相信使用过串口接收中断的开发人员都有一定的了解。UART0接收到1Byte数据后进入中断接收逻辑。由于串口一直不断的接收到数据程序将不断触发串口接收逻辑。开发者可以将接收到的数据存入数组。然后在主循环中对接收数据进行解析如果符合数据帧格式就执行相应的操作。为了防止数据溢出可以使用环形数组。也就是记录接收数据的开始位置、结束位置数据索引循环处理例如index%arrRecvLen。int indexTx 0; //发送索引 int indexRx 0; void UART0_IRQHandler(void) { if(FL_SET FL_UART_IsEnabledIT_TXIE(UART0) FL_SET FL_UART_IsActiveFlag_TXIF(UART0)) { FL_UART_ClearFlag_TXIF(UART0); /*中断发送测试代码 for(indexTx 0;indexTx 9;indexTx) { UART0-TXREG arrSend[i]; } */ } if(FL_SET FL_UART_IsEnabledIT_RXIE(UART0) FL_SET (FL_UART_IsActiveFlag_RXIF(UART0))) { arrRecv[indexRx] (uint8_t)FL_UART_ReadRXBuff(UART0); if(indexRx 10) { } } }中断发送中断发送功能我了解的不多只能给出自己的见解。我为了验证这个功能就在中断使能函数的末尾添加了“UART4-TXREG S”,这样系统初始化执行到末尾便会主动发送S字符接着进入串口发送中断不断向串口发送缓冲区填充数据直至数组内容发送完毕。至此中断发送功能得到验证。但是真正使用的时候还要检查发送缓冲区是否为空不能直接发送。最后再给出中断发送与轮询发送的对比表格。轮询发送for循环中断发送中断驱动for(i0; i13; i) {UART5-TXBUF commSendBuf[i];while(TXE0);}主程序start_index0 0;end_index 13;UART5-TXBUF commSendBuf[0];开启中断使能;中断服务程序自动触发13次if(start_index0 end_index)UART5-TXBUF commSendBuf[start_index0];else关闭中断使能;维度轮询发送中断发送发送循环位置主程序for循环中断服务程序ISR如何检测TXEwhile(TXE0);主动等待由硬件中断自动触发无需显式等待是否有检测代码有显式while有ISR中的if判断索引及硬件自动触发CPU占用高等待期间100%占用低只在ISR中占用几微秒代码结构简单、直观复杂、需要管理状态和中断使能

相关新闻

手把手教你学 Simulink—— 磁场调制电机(FMM)的新型控制策略建模与仿真

手把手教你学 Simulink—— 磁场调制电机(FMM)的新型控制策略建模与仿真

目录 手把手教你学 Simulink —— 磁场调制电机(FMM)的新型控制策略建模与仿真 一、为什么 FMM 是“新型控制”的热土? 1.1 FMM 家族与共同特征 1.2 对控制的挑战与机会 二、系统总体架构(FMM‑aware 控制) 三、关键建模:FMM 等效电路 + 调制传递函数 3.1 核心思…

2026/8/8 9:57:05 阅读更多 →
UE5 UMG菜单闪烁引发GPU崩溃:从渲染异常到TDR超时的诊断与修复

UE5 UMG菜单闪烁引发GPU崩溃:从渲染异常到TDR超时的诊断与修复

1. 项目概述:当UE5的菜单开始“鬼畜”闪烁 最近在项目里遇到一个挺典型的UE5运行时问题,场景不算复杂,但现象很恼人:一个嵌套了多层子菜单的UMG界面,在特定操作下(比如快速来回切换或鼠标悬停)会…

2026/8/8 9:57:05 阅读更多 →
从PWM原理到实战:详解蜂鸣器驱动与音乐播放实现

从PWM原理到实战:详解蜂鸣器驱动与音乐播放实现

1. 项目概述:从“响”到“调”,PWM驱动蜂鸣器的核心价值 搞嵌入式开发的朋友,对蜂鸣器这个“嘀嘀”叫的小玩意儿肯定不陌生。它简单、便宜,是项目里最常用的声学反馈设备。但不知道你有没有遇到过这样的困惑:为什么我的…

2026/8/8 9:57:05 阅读更多 →

最新新闻

计算机毕业设计之房屋租赁系统的设计与实现

计算机毕业设计之房屋租赁系统的设计与实现

随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,用户到房源…

2026/8/8 10:49:31 阅读更多 →
千亿参数大模型Kimi-K3实测:从部署到性能的深度评测与工程实践

千亿参数大模型Kimi-K3实测:从部署到性能的深度评测与工程实践

最近在尝试部署和使用一些新发布的大语言模型时,发现社区对月之暗面(Moonshot AI)推出的 Kimi-K3 模型讨论非常热烈。作为一个参数规模巨大的模型,很多开发者都在好奇:它真的像宣传的那么“好用”吗?是徒有…

2026/8/8 10:49:31 阅读更多 →
Unity高亮插件Highlight Plus:从核心原理到实战应用

Unity高亮插件Highlight Plus:从核心原理到实战应用

1. 项目概述:为什么我们需要Highlight Plus? 在Unity项目开发中,尤其是制作动作游戏、解谜游戏或者需要强引导的UI界面时,我们常常会遇到一个高频需求:如何让场景中的某个物体“亮”起来?这里的“亮”不是指…

2026/8/8 10:49:31 阅读更多 →
Colab运行YOLOv8:云端目标检测实战指南

Colab运行YOLOv8:云端目标检测实战指南

1. 为什么选择Colab运行YOLOv8? Google Colab已经成为深度学习实践者的云端工作站首选。作为一个长期在目标检测领域折腾的老兵,我亲测Colab运行YOLOv8有三大不可替代的优势: 首先是硬件门槛的突破。Colab免费版就提供T4或V100 GPU&#xff…

2026/8/8 10:49:31 阅读更多 →
车漆厚度检测技术全解析:从原理到实践,量化评估汽车质量

车漆厚度检测技术全解析:从原理到实践,量化评估汽车质量

这次我们来看一个关于汽车质量检测与消费者权益保护的技术话题。虽然标题本身带有一定的网络热议色彩,但其背后涉及的核心技术问题——如何客观、量化地检测“车漆厚度”并以此作为质量判据——是一个典型的工业视觉与数据分析应用场景。对于车主、第三方检测机构甚…

2026/8/8 10:49:31 阅读更多 →
3分钟快速安装苹果USB驱动:Windows系统iPhone网络共享完整指南

3分钟快速安装苹果USB驱动:Windows系统iPhone网络共享完整指南

3分钟快速安装苹果USB驱动:Windows系统iPhone网络共享完整指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…

2026/8/8 10:48:31 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/8 8:58:26 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →