STM32使用USART中断主要有一下几步:% j; J% V5 X) S& U Y$ y ' n Q' d7 [5 M1 ]8 x v. c& t 1,定义中断结构体,和串口结构体( R/ s# X5 N& z9 O4 t5 F * x0 z5 H, H* @" [0 u 2,使能时钟& o$ a9 x) P+ @3 n3 X! j 0 u6 m; T6 ~* @3 H 3,编写中断函数6 b! b" J% b. C2 X, `3 W* J6 [ ) U9 Z5 D7 k% b+ x 4,使能中断& S6 {) `6 \3 z" b( A+ p/ w/ z 关于发送中断,笔者当时有个疑惑:' z* a0 ]: y+ ] 上图是关于状态寄存器(USART_SR)中的两位。3 v* I4 m" J/ _; c 4 `7 y( m% g- p: X ~ G( G+ H 上图是控制寄存器1(USART_CR1)中的两位。 笔者当时的疑惑是,这两位都可以控制中断啊,DR数据被移走触发中断,DR数据被移走也会使TC为置一,也会产生中断,这尼玛不冲突了?笔者当时陷入了死循环。 2 c o' n! m5 L 后来笔者想通了,要进入发送中断,用库函数:USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 这个函数时用来打开CR1中的响应位的,比如上一句,是用来打开发送完成中断的,也就是置TXEIE位为1(并且发送缓冲区最初就是空),接下来就会进入中断服务函数。这里并没有打开TCIE位(即并没有使能发送完成中断,所以不会产生冲突)。4 ^8 i$ G* r) ^$ i+ m 当是以查询方式来发送数据时,并没有使能中断也没有使能中断通道,故怎么着也不会产生中断,只用查询SR寄存器就行了。 ———————————————— 版权声明:家安. V, @; t! {6 e ) V% a4 S$ l1 l; F7 C |
小马哥STM32F103开源小四轴RoboFly全部资料大放送
STM32固件库分享,超全系列整理
【MCU实战经验】+STM32F107的USB使用
基于STM32F103两轮平衡小车设计(开源)
STM32F107VCT6官方原理图和PCB
【福利】用STM32库的朋友有福了:STM32F10x_StdPeriph_Lib_V3.5.0chm...
基于STM32F10xx存储器和系统架构经验分享
基于STM32F1的CAN通信之BH1750
基于STM32F1的CAN通信之OLED
基于STM32F1的CAN通信之之串口IAP