OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3226|回复: 1

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

[复制链接]

3

主题

7

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-12-12
在线时间
4 小时
发表于 2017-5-17 16:59:20 | 显示全部楼层 |阅读模式
5金钱


下面是一个采集传感器数据并在液晶显示屏上面显示出来的程序,可是在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\r\n",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;
                 }         
     }
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-17 21:25:39 | 显示全部楼层
单步跟踪,看为什么和你的设计不一致。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 02:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表