代码如下,
[mw_shl_code=c,true]int k=0;
if(DMA_GetITStatus(DMA1_IT_TC1))
{
// USART_SendData(USART2,0x46);
hz[0] = t/100 +'0';
hz[1] = t %100 /10 + '0';
hz[2] = t %10 + '0';
for(k=0;k<3;k++)
{
USART_SendData(USART2,hz[k]);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
// delay_us(100);
}
// USART_SendData(USART2,0x3f);
// while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
// delay_us(1000);
USART_SendData(USART2,0x21);
while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
t++;
}这是发送程序,用另一个板子接收,根据原子哥的程序改的,以0x21为结束符,程序如下[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]void USART2_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res = USART_ReceiveData(USART2); //(USART1->DR); //读取接收到的数据
// printf("%u8",Res);
if((USART_RX_STA&0x80)==0) //接收未完成
{
if(USART_RX_STA&0x40)
{
// if(Res!=0x21)USART_RX_STA=0; //接收错误,重新开始
USART_RX_STA|=0x80; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x21)USART_RX_STA|=0x40;//在这里可以随意控制结束符 ascll 查询即可
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=Res ;
USART_RX_STA++;
if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
} [/mw_shl_code]
下面是主程序的显示函数:[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true] while(1)
{
if(USART_RX_STA&0x80)
{
int j=100;
printf("\n您发送的消息为:\n");
len = USART_RX_STA&0x3f; //得到此次接收到的数据长度
for(t=0;t<len;t++)
{
USART2->DR = USART_RX_BUF[t];
while((USART2->SR&0X40)==0); // 等待发送结束 TC位
}
for(i=0;i<len;i++) //在屏幕上显示接收到的字符
{
LCD_ShowChar(j+=8,120,USART_RX_BUF,16,0);
}
USART_RX_STA=0;
}[/mw_shl_code]
大神帮忙看看,谢谢各位了
[/mw_shl_code]
|