uint8_t f,num,RxTimeOut,flag;
void USART1_IRQHandler(void)
{
uint8_t i; //printf("\n您发送的消息为:\n");
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
{
if(!flag)
{
RxTimeOut=10;//字符串超时等待时间;3毫秒;
i = USART_ReceiveData(USART1);//接收下一个字符 返回USARTx最近接收到的数据
USART_RX_BUF[f]=i; //data[num++]=i;
USART_SendData(USART1,USART_RX_BUF[f]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {}; //发送寄存器空标志
f=f+1;
if (f==63) {f=0;flag=1;} //32个数据接收完成,flag置1,f进入空闲状态
}
flag=!flag;//f=0;
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) == RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE); // 清除USARTx的中断待处理位
}
}
void SysTick_Handler(void)
{
if(RxTimeOut>0) RxTimeOut--;
else f=63; //超时进入空闲状态
}
这就是我写的串口中断函数,在你的mimi的板上了输入的可以打印出正确的字符,不知道为什么,一旦我换了一块别的开发板就不行了,用Printf 打印的没有问题,但是我通过串口输入的我打印出为就是乱码,但是用原本的要输入回车号的那个中断服务程序就没有问题。是不是我写的中断有存在不周密的地方,还是,请原子大哥帮忙!万分感谢!~
这两个图片就是来自上面所说的用别的板子,而用你的板子却没有问题。很奇怪呀~
|