}
//-------使能串口中断程序----------------------------------------------------
#ifdef EN_USART1_RX //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误
u8 USART_RX_BUF[200]; //接收缓冲,最大200个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
u8 USART_RX_STA=0; //接收状态标记
void USART1_IRQHandler(void)
{
u8 res;
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}else //还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
USART_RX_STA++;
if(USART_RX_STA>199)USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
#endif
/********函数功能:发送字符串到串口******************************
void Uart1_Send(u8 i)
{
USART1->DR=i;
while((USART1->SR&0X40)==0);//等待发送结束
}
void Uart1_Sends(u8* data_at)
{
unsigned char cnt=0;
while(*(data_at+cnt)) //判断一串数据是否结束
{
USART1->DR= *(data_at+cnt);//装入数据
while((USART1->SR&0X40)==0);//等待发送结束
cnt++;
}
}