我想通过USART来实现两个开发板之间的通信,但是显示不对,一直显示是:R RR RR
不知道是什么原因,请教一下大家。
主接收显示代码:
main.c
while(1)
{
POINT_COLOR=RED;
x=USART3_Scan();
if(x)
{
LCD_ShowString(30,170,200,12,12,"correct");
for(i=0;i<USART_RX_STA;i++)
{
LCD_ShowString(30+i*8,190,200,12,12,(u8*)RX3_Buff[i]);
}USART_RX_STA=0;
}else
{
LCD_ShowString(30,210,200,12,12,"receive failed");
}
串口部分:
u8 RX3_Buff[0xff];
int USART3_Scan(void)
{
u16 ftemp=0,i;
ftemp=USART_RX_STA;
if(ftemp!=0)
{
delay_ms(100);
while(ftemp!=USART_RX_STA)
{
ftemp=USART_RX_STA;
delay_ms(100);
}
USART_RX_BUF[ftemp]='
';
USART_RX_BUF[ftemp+1]=' ';
for(i=0;i<=ftemp+1;i++)
{
RX3_Buff[i]=USART_RX_BUF[i];
}
return 1;
}
return 0;
}
void USART3_IRQHandler(void) //串口3中断服务程序
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断
{
Res =USART_ReceiveData(USART3); //读取接收到的数据
if(USART_RX_STA<800)//接收未完成
{
USART_RX_BUF[USART_RX_STA]=Res;
USART_RX_STA++;
}
}
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
#endif
从发送部分:
uint8_t Uart1_Put_Char(unsigned char DataToSend)
{
TxBuffer[count++] = DataToSend;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
return DataToSend;
}
void USART1_IRQHandler(void) //串口1中断服务程序
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART1->SR & USART_IT_ORE)
{
USART1->SR;
}
//发送中断
if((USART1->SR & (1<<7))&&(USART1->CR1 & USART_CR1_TXEIE))//if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET)
{
USART1->DR = TxBuffer[TxCounter++]; //写DR清除中断标志
if(TxCounter == count)
{
USART1->CR1 &= ~USART_CR1_TXEIE; //关闭TXE中断
//USART_ITConfig(USART1,USART_IT_TXE,DISABLE);
}
}
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntExit();
#endif
}
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
USART1_Init(115200);
while(1)
{
Uart1_Put_String("Welcome
");
Uart1_Put_String("to
");
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>