用串口调试助手模拟传感器发过来的数据(一次将近4000字节)时,当1s发一次时,LCD屏能正常显示,但是小于500ms发一次时,LCD显示一点点数据之后就卡死了,,,有哪位大哥能帮我解决一下下嘛
以下是代码
uint8_t buf[64][64]={0};
int i=0;
int x=0,y=0;
int j=0,a=0;
uint8_t ReceiveState=0;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
USART11_init(); //初始化串口波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD FSMC接口
POINT_COLOR=RED; //画笔颜 {MOD}:红 {MOD}
LCD_Fill(0,0,480,800,GREEN);
while(1)
{
if(ReceiveState==1)
{
ReceiveState=0;
if(j!=0)
{
for(i=0;i<=x;i++)
{
LCD_ShowString(50,a,424,12,12,buf[i]);
a+=14;
if(a==700)
{
a=0;
}
}
x=0;
y=0;
}
else
{
for(i=0;i<x;i++)
{
LCD_ShowString(50,a,424,12,12,buf[i]);
a+=14;
if(a==700)
{
a=0;
LCD_Clear(GREEN);
}
}
x=0;
y=0;
}
}
}
}
void USART1_IRQHandler()
{
uint8_t Clear=Clear;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
buf[x][y]=USART1->DR;
USART_SendData(USART1,buf[x][y]);
y++;
if(y==64)
{
x+=1;
y=0;
}
//等待串口发送完成,也就是串口发送数据寄存器为空
//while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);
}
else if(USART_GetITStatus(USART1, USART_IT_IDLE)!=RESET)
{
Clear=USART1->SR;
Clear=USART1->DR;
ReceiveState=1;
}
}
你可以依照这个思路来优化代码验证你的假设。
一周热门 更多>