STMCU小助手
发布时间:2023-1-4 21:27
|
STM32使用USART中断主要有一下几步: c' e9 j" I5 t0 S) ] 1,定义中断结构体,和串口结构体 : k2 y' E- ]9 K' c 2,使能时钟 9 Q e! @; x8 H. H! h2 x8 l1 E$ y" N 3,编写中断函数 4 s4 ]( D8 _3 Q ?. `: i2 a 4,使能中断 ) l+ T7 j+ D( O" u: v3 V 关于发送中断,笔者当时有个疑惑:, y0 Y- O# w& m2 r
' F8 v- ]+ w. e# J 上图是关于状态寄存器(USART_SR)中的两位。/ g( n* r! o1 i$ q1 H" z
) ?/ w- I- Z/ k5 B+ Z- E& \3 H" e 上图是控制寄存器1(USART_CR1)中的两位。) O) `1 q6 _ T& R" f' E8 z + G2 a# Q; n; G# k o+ x2 Z4 N0 T$ U% m 笔者当时的疑惑是,这两位都可以控制中断啊,DR数据被移走触发中断,DR数据被移走也会使TC为置一,也会产生中断,这尼玛不冲突了?笔者当时陷入了死循环。7 \. X; P$ a" M; D+ |# c 后来笔者想通了,要进入发送中断,用库函数:USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 这个函数时用来打开CR1中的响应位的,比如上一句,是用来打开发送完成中断的,也就是置TXEIE位为1(并且发送缓冲区最初就是空),接下来就会进入中断服务函数。这里并没有打开TCIE位(即并没有使能发送完成中断,所以不会产生冲突)。! k: i8 j8 r' P) J/ `/ w- d 当是以查询方式来发送数据时,并没有使能中断也没有使能中断通道,故怎么着也不会产生中断,只用查询SR寄存器就行了。0 b2 v- K( H1 ~- |, e5 D ————————————————/ c' D# } c1 n1 W; a* p 版权声明:家安 |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版