您的位置:首页 > 其它

STM32库函数EXTI_GetFlagStatus()和EXTI_GetITStatus()区别是什么?

2014-06-17 12:45 274 查看
http://blog.sina.com.cn/s/blog_71c0df0d010189qn.html

http://zhidao.baidu.com/link?url=oTfU99dJFlAWd5yc6H2KHlZ7Dwt2IooH9-FCTO33_O_UU9qSj0lzQu8gWJt31X7rJ0EbEXvy9hM-EmQYV1e1Nq

一个是获取状态的,一个是获取中断的。

EXTI_GetFlagStatus只是纯粹读取中断标志位的状态,但是不一定会响应中断(EXT_IMR寄存器对该中断进行屏蔽);而EXTI_GetITStatus除了读取中断标志位,还查看EXT_IMR寄存器是否对该中断进行屏蔽,在中断挂起&没有屏蔽的情况下就会响应中断。仔细看看代码就知道区别了

FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line)

{

FlagStatus bitstatus = RESET;



assert_param(IS_GET_EXTI_LINE(EXTI_Line));



if ((EXTI->PR & EXTI_Line) != (uint32_t)RESET) //只是纯粹读取中断标志位的状态,但是不一定会响应中断(EXT_IMR寄存器对该中断进行屏蔽)

{

bitstatus = SET;

}

else

{

bitstatus = RESET;

}

return bitstatus;

}

ITStatus EXTI_GetITStatus(uint32_t EXTI_Line)

{

ITStatus bitstatus = RESET;

uint32_t enablestatus = 0;



assert_param(IS_GET_EXTI_LINE(EXTI_Line));



enablestatus = EXTI->IMR & EXTI_Line;

if (((EXTI->PR & EXTI_Line) != (uint32_t)RESET) && (enablestatus != (uint32_t)RESET)) //除了读取中断标志位,还查看EXT_IMR寄存器是否对该中断进行屏蔽,在中断挂起&没有屏蔽的情况下就会响应中断

{

bitstatus = SET;

}

else

{

bitstatus = RESET;

}

return bitstatus;

}

IT主要就是与中断相关的,检查USART中断产生与否,当USART发送完成后会有USART_IT_TC中断,因此可以用来判断,而USART_GetFlagStatus是USART标志位设置与否,其中就有发送完成标志位USART_Flag_TC所以也可用来判断。而最终都是操作SR寄存器。

USART_GetFlagStatus仅仅是把SR相应的标志位置位,但是USART_GetITStatus还会去操作相应的CR1,CR2,CR3,完了再去进行SR的置位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: