本帖最后由 1208 于 2019-1-5 11:27 编辑
ITStatus USART_GetITStatus函数分析使用
从函数可以看出用到CR控制寄存器和SR状态寄存器
CR控制寄存器是手动控制的,可读可写,而SR状态寄存器是只能读
出于安全性考虑,要先开CR寄存器,然后再用SR寄存器去读,两个条件同时满足才可以开中断
CR负责使能中断和失能中断(编程控制),如果使能中断,判断SR寄存器的状态是如果置1(单片机硬件控制),就产生中断。
如果CR不使能中断,SR即使置1也不能产生中断。只有CR使能中断,SR置1才能进入中断
USART_GetITStatus 由此可得
不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。
FlagStatus USART_GetFlagStatus函数分析使用
这里只用到SR状态寄存器,只判断标志位。 在没有使能相应的中断函数时,通常使用该函数来判断标志位是否置1 适用于ITStatus USART_GetFlagStatus函数 USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并
且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将
该位清零,也可以向该位写 0,直接清除。
USART_GetFlagStatus(USART1, USART_FLAG_TC);
TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如
果设置了这个位的中断,则会产生中断。该位也有两种清零方式: 1)读 USART_SR,写
USART_DR。 2)直接向该位写 0。
|