波特率是9600
void UART5_IRQHandler(void)
{
u8 res;
//if(USART_GetFlagStatus(UART5, USART_FLAG_RXNE)!=RESET)
if(USART_GetITStatus(UART5, USART_IT_RXNE) != RESET)//接收到数据中断,(接收到的数据必须是0x0d 0x0a结尾)
{
res =USART_ReceiveData(UART5);//读取到收到的数据
if(UART5_RX_STA<UART5_MAX_RECV_LEN) //还可以接收数据
{
TIM_SetCounter(TIM3,0);//计数器清空
if(UART5_RX_STA==0)TIM3_Set(1); //使能定时器3的中断
UART5_RX_BUF[UART5_RX_STA++]=res; //记录接收到的值
}else
{
UART5_RX_STA|=1<<15; //强制标记接收完成
}
}
}
采用的是循环发送数据方式:
/**************************************************
UART5发送一个字节
**************************************************/
void UART5_Tx_Char(u8 i)
{
USART_SendData(UART5,i); //发往WIFI模块
while(USART_GetFlagStatus(UART5, USART_FLAG_TXE)==RESET);
}
/*******************************************
UART5发送字符串
*******************************************/
void UART5_Tx_Str(u8 *pt, u8 length)
{
u8 i;
for( i=0;i<length;i++ ){
UART5_Tx_Char(*pt++);
//printf("\r\nUART5_test_2:\r\n",USART_ReceiveData(UART5));
}
//delay_ms(500);
}
UART5发送数据没有问题,但是接受数据时,平均每10次有两次会收不到数据,这是为什么?
(UART5<=>WIFI,手册技术支持上WIFI波特率115200,但是我试过115200,收发数据根本不行,9600恰好可以)
也就是说,当状态值UART5_RX_STA为数组最大缓存值时,接收数据时正确的,如果小于数组最大缓存值,则收不到数据,或者接收数据不完全 |