stm32 串口1打印与液晶显示冲突

2019-08-21 11:14发布



下面是一个采集传感器数据并在液晶显示屏上面显示出来的程序,可是在mian函数体内,任意一个地方添加 printf 打印数据之后,运行程序则显示屏不能显示,串口1也不能打印数据到电脑端。不使用液晶显示屏的时候串口1打印就能正常执行(printf 是重定向的)。请问大神们这是什么原因?????




#include "public.h"
#include "adc.h"
#include "systick.h"
#include "gui.h"
#include "led.h"
#include "printf.h"


unsigned char ucRxBuffer[32] = {0};
static int Flag = 0;
float  pm1_0=0;
float  pm2_5=0;
float  pm10_0=0;






int main()
{
        char data_buf[100];
        LED_Init();          //端口初始化
        TFT_Init();         //TFT彩屏初始化
        printf_init();        //printf初始化
        USART2_Init_Config(9600);
        TFT_ClearScreen(BLACK);           //清屏
        GUI_Show12ASCII(10,10,"This is a ADC1-Channel16-Temp Check!",YELLOW,BLACK);
        GUI_Show12ASCII(10,100,"The PM2.5 Value is:",YELLOW,BLACK);
        while(1)
        {
                if(Flag == 1)
                {
                        Flag = 0;
                       
                        if (ucRxBuffer[0] == 0x42 && ucRxBuffer[1] == 0x4D)  
                        {
                                pm2_5= (float)ucRxBuffer[12] * 256 + (float)ucRxBuffer[13]; //中国标准
                                //printf("%.2fug/m^3 ",pm2_5);       //问题:如果在这儿通过串口1打印到电脑端显示,则液晶不能显示,串口1也不能打印。
                                sprintf(data_buf,"%.2fug/m^3",pm2_5);
                                GUI_Show12ASCII(180,100,data_buf,YELLOW,BLACK);
                        }       
                 }
    }
}


void USART2_IRQHandler(void)    //串口2中断入口函数
{
     static int ucRxCnt = 0;
     USART_ClearFlag(USART2,USART_FLAG_TC);
     if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)
     {
                 USART_ClearFlag(USART2,USART_IT_RXNE);
                 ucRxBuffer[ucRxCnt++] = USART_ReceiveData(USART2);
                 if(ucRxCnt == 2)
                 {
                        if(ucRxBuffer[0] != 0x42 || ucRxBuffer[1] != 0x4d)
                        {
                                ucRxCnt = 0;
                        }
                 }
                 if(ucRxCnt== 32)
                 {
                        Flag = 1;
                        ucRxCnt = 0;
                 }         
     }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。