你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用 UART IDLE 中断接收不定长数据

[复制链接]
STMCU小助手 发布时间:2022-7-29 16:14
前言
, L; ^/ G0 B+ T0 _! D在串口通信过程中,我们常常用到接受和发送中断,相信大家都不陌生。这里还有另一个非常有用的中断可能被大家所忽略,即总线空闲状态 IDLE 中断。当一帧数据传输结束之后,总线会维持高电平空闲,此时会触发 MCU 的 IDLE中断。在本文中,将介绍使用该中断来进行不定长串口数据接收的办法。通过该中断,可以省却用于检测数据传输是否完成的判断操作。
9 i" l# i7 N3 O( ?! f
+ }! E+ U  @1 f6 ~. ?) g实验环境 9 M2 v& c9 ?* z$ i  e, t
•STM32F411RE-NUCLEO( q! R5 f5 Y9 ~* k$ G
•STM32CubeMX
' B6 ^6 w% g7 B1 s5 O- r% T2 o4 O1 `3 e  A* ~$ U5 K

0 j, A9 h' y/ S1 z- u总线状态分析 8 h% i* e) B* x8 Z! l8 r
下图是发送 0xAA 0x55 的所抓取到的波形。从图中我们可以看到在发送该帧之前和之后,总线时钟处于 IDLE 状态。& ]5 q" E1 a3 D" E) w
在该帧中,字节与字节之间,没有 IDLE 状态出现,即不会出现 IDLE 误触发的情况。
* G3 \' Q# U. S' Q/ e2 v" \2 @3 g1 {4 f' e% V
WZK_Y[DSKQ{%8O31NRD%S.png
, h& F- v: c3 ^

! V. j0 \+ N) m( d9 e# ^不定长数据接收
# {3 ~' R' ?; h3 e本次制作的工程是基于 HAL 库的。在原生的 HAL 库中,并没有集成 IDLE 中断的处理。所以,在本文我们介绍的方法中,需要修改一些库文件来实现。
: ^- D' {7 d7 ^8 z( i: |1 `6 R! o. e+ U$ e  \6 D
使用 STM32CubeMX 生成实验工程
9 E& Y# h" {8 d! \工程的配置如下图:
1 Q, D( c5 a5 D1. 系统始终配置为 100MHz
4 X* h; M9 U; ?6 P2. 配置 USART2 为 Asynchrones,管脚配置为 PA2,PA3。
, D& l0 E4 @0 k4 {; p1 m" ~3. USART2 参数:9600Bits/s, 8bits, None,1Stop
. t6 V* ?, c% t3 A7 g9 t7 ]
. N, m: c, i* n P~KJ4AJTL4LV4({X2NUNM.png   ?; g% A2 E6 x. X' H2 u

5 c9 m1 k" K4 a# N( r为了方便打印接收到的相关信息,需要对生成的工程做如下修改来映射 print 函数。
; r% c! q+ h$ a: Y( cmain.c-声明
  1. #ifdef __GNUC__
    $ ?" J8 `4 Q3 A! Y- x7 r# A+ x4 Y
  2. /* With GCC, small printf (option LD Linker->Libraries->Small printf
    / l9 }& K. v+ ]8 q" l3 W8 M* Y
  3. set to 'Yes') calls __io_putchar() */
    : f5 c* g" J3 m
  4. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)5 Z; r  {5 {3 H9 b5 q: J
  5. #else9 l( N- [; i% W+ D
  6. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)2 u- [/ c7 f# D1 a" _( _% C) [
  7. #endif /* __GNUC__ */
复制代码
. D' U* O1 w  W" U' D6 U: V

  f  @0 T0 ~0 c. ^, z' n, P完整版请查看:附件
* r, L% l  X* ?4 x0 o
) D3 @% I, t, X* r0 V" z
. g5 |2 J+ M0 Q: ~  Z1 F

LAT0534_UART_IDLE中断使用_接收不定长串口数据.pdf

下载

427.31 KB, 下载次数: 16

赞 收藏 评论0 发布时间:2022-7-29 16:14

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版