下面是一个采集传感器数据并在液晶显示屏上面显示出来的程序,可是在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;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>