
前言 - c" L; A1 V8 j9 U9 B( ` 在串口通信过程中,我们常常用到接受和发送中断,相信大家都不陌生。这里还有另一个非常有用的中断可能被大家所忽略,即总线空闲状态 IDLE 中断。当一帧数据传输结束之后,总线会维持高电平空闲,此时会触发 MCU 的 IDLE中断。在本文中,将介绍使用该中断来进行不定长串口数据接收的办法。通过该中断,可以省却用于检测数据传输是否完成的判断操作。 - c, {$ X' a! V 实验环境 + b7 @* `; b4 N7 r$ ~- _ •STM32F411RE-NUCLEO •STM32CubeMX . S$ M7 ~, F4 f& `3 V# n; i, _+ o) h * o' ^" m, U! S, T# W* k9 F 总线状态分析 % m# R* r: W( ^ `- J) B) j 下图是发送 0xAA 0x55 的所抓取到的波形。从图中我们可以看到在发送该帧之前和之后,总线时钟处于 IDLE 状态。 在该帧中,字节与字节之间,没有 IDLE 状态出现,即不会出现 IDLE 误触发的情况。 ![]() 不定长数据接收 . f* R9 v: A: o0 C, S 本次制作的工程是基于 HAL 库的。在原生的 HAL 库中,并没有集成 IDLE 中断的处理。所以,在本文我们介绍的方法中,需要修改一些库文件来实现。 使用 STM32CubeMX 生成实验工程 工程的配置如下图: 1. 系统始终配置为 100MHz5 ^! g" @& R+ c# `" c 2. 配置 USART2 为 Asynchrones,管脚配置为 PA2,PA3。 4 I _) X5 f/ p( m0 D; s7 N 3. USART2 参数:9600Bits/s, 8bits, None,1Stop . i* }6 f/ B3 _" O1 T; s& ` ![]() 为了方便打印接收到的相关信息,需要对生成的工程做如下修改来映射 print 函数。) }1 O$ } i6 W1 S main.c-声明
完整版请查看:附件) S; n% s. _, z% c% b - Z0 x, o! e2 H1 O$ J $ K$ U1 G+ Y3 G* ^ |
LAT0534_UART_IDLE中断使用_接收不定长串口数据.pdf
下载427.31 KB, 下载次数: 12
【STM32U3评测】实现双通道串口通信系统
STM32G系列RS485自动收发控制以及自适应波特率实战
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
【STM32MP135-DK】裸机移植shell
NUCLEO-U545RE-Q评测】3. 串口基本收发测试
NUCLEO-U545RE-Q评测】4. 串口实用收发测试
基于STM32模拟UART串口通信
【STM32H503评测】+ coremark跑分移植测试
基于STM32H563演示UART+DMA经验分享
STM32的通用同步异步收发器USART模块