关于USART_ClearITPendingBith和 USART_ClearFlag的区别

在非中断服务函数中,使用 USART_ClearITPendingBit 会导致程序卡住,因为它用于获取并清除中断标志位。而 USART_ClearFlag 则仅处理标志位,与中断无关,适用于非中断场景。在中断服务函数里,两者可互换使用。
摘要由CSDN通过智能技术生成
int fputc(int ch,FILE *p)
{
	
	USART_SendData(USART1,(u8)ch);
	while(USART_GetITStatus(USART1,USART_IT_TXE) != SET);
	return ch;
}

  今天学到printf实验,结果跑半天就是不知道程序卡在哪个地方,比较板子的源码发现,我的这两个语句用错了,虽然题目不是写的是这个,但道理是一样,所以解释一下

USART_GetITStatus(USART1,USART_IT_TXE)
USART_GetFlagStatus(USART1,USART_FLAG_TXE

第一个是获取中断标志位,而我的程序并不是中断服务函数,所以一直卡在这个循环上,而第二个只是单纯处理完或者获得标志位,和中断无关,所以一定要记住其他的不是中断的函数一定要使用第二个

若是在中断服务函数中,则两者并无区别,可以随意替换

void USART1_IRQHander(void)
{
    u8 r;
    
    if(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值