STM32F4利用串口一接收传感器不断传输过来的数据(一次大概30kb)然后在tftlcd上打印出来,但是用串口调试助手模拟传感器发过

2019-07-20 06:10发布

用串口调试助手模拟传感器发过来的数据(一次将近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;       
        }
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-07-20 09:16
 精彩回答 2  元偷偷看……
KANGKING
2楼-- · 2019-07-20 13:29
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 16:24
KANGKING 发表于 2018-9-8 16:21
是不是串口数据接收太快,而stm32tftlcd 的LCD_ShowString函数显示速率太慢而导致的呢

你可以依照这个思路来优化代码验证你的假设。
way2888
4楼-- · 2019-07-20 16:51
 精彩回答 2  元偷偷看……

一周热门 更多>