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(