ClearFlag()和ClearITPendingBit()的区别

您所在的位置:网站首页 stm32库函数定义原理 ClearFlag()和ClearITPendingBit()的区别

ClearFlag()和ClearITPendingBit()的区别

2023-07-16 18:49| 来源: 网络整理| 查看: 265

相信部分小伙伴在学习中断时对这两个函数有点懵,乍一看,这两个函数好像没啥区别,但其实还是有细微的区别的,它体现了编程逻辑的严谨,为啥这么说呢,请往下看。 首先我们看看两者的作用: ClearFlag():清除中断标志位 ClearITPendingBit():清除中断待处理位

在这里,想要明白两个函数的区别就得明白标志位和待处理位是啥:

标志位是事件发生与否的判断依据,用于支持函数的运行,如果事件发生,则该位至1,但是这不一定会产生中断,查阅手册USART寄存器(下图)可以看到,事件发生后,标志位TXE置1,但是想要产生中断,还得将TXEIE位置1(使能中断)。 在这里插入图片描述 待处理位是控制中断发生的标志,如果该位置1(前提是相应标志位置1和中断已使能),则会产生中断,进入中断服务函数,而且在中断服务函数中必须手动将该位置0,否则程序会一直执行该中断。 了解完标志位和待处理位的区别,我们就能发现这两个函数的相似之处:ClearFlag()清除了标志位,中断自然不能发生,所以 ClearITPendingBit()和ClearFlag()的作用都是清除中断,在中断服务函数中任选一个使用就行了,更重要的是掌握标志位和待处理位的区别,有兴趣的小伙伴可以看看两个函数的定义。

void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG) { /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_CLEAR_FLAG(USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */ if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS) { assert_param(IS_USART_1236_PERIPH(USARTx)); } USARTx->SR = (uint16_t)~USART_FLAG; } void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT) { uint16_t bitpos = 0x00, itmask = 0x00; /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_CLEAR_IT(USART_IT)); /* The CTS interrupt is not available for UART4 and UART5 */ if (USART_IT == USART_IT_CTS) { assert_param(IS_USART_1236_PERIPH(USARTx)); } bitpos = USART_IT >> 0x08; itmask = ((uint16_t)0x01


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3