找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2500|回復: 8
打印 上一主題 下一主題
收起左側

為啥C語言printf打印不出需要的數據?不知是哪卡死了

[復制鏈接]
跳轉到指定樓層
樓主
ID:967636 發(fā)表于 2022-4-7 11:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求助:傳感器初始化順序調整了也沒有變化,while(1)中循有if{if{}},為何執(zhí)行不同,是delay_ms的問題嗎?
C語言程序如下:
#include "stdio.h"//標準輸入輸出庫
#include "string.h"//字符串庫
#include "stdlib.h"//常用的系統(tǒng)函數庫
#include "sys.h"//系統(tǒng)中斷分組庫
#include "delay.h"//延時函數庫
#include "usart.h"//串口設置庫
#include "mpu6050.h"//MPU6050驅動庫
#include "inv_mpu.h"//陀螺儀驅動庫
#include "inv_mpu_dmp_motion_driver.h" //DMP姿態(tài)解讀庫

float Weight = 0;

u8 tmp_buf[33];                        //字符串數組
struct MPU6050                                //MPU6050結構體
{
        u8 flag;                                //采集成功標志位
        u8 speed;                                //上報速度
}mpu6050;                                        //唯一結構體變量

   float pitch,roll,yaw;
   short aacx,aacy,aacz;                //加速度傳感器原始數據         
   short gyrox,gyroy,gyroz;        //陀螺儀原始數據
   short temp;                                        //溫度
                                          
         int main(void)
{        
        unsigned short timeCount = 0;        //發(fā)送間隔變量

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中斷優(yōu)先級分組函數
        delay_init();                                                                     //延時函數初始化        
        uart_init(115200);                                           //串口初始化為115200
        Init_Hx711();//初始化HX711
        delay_ms(2000);//等待感器穩(wěn)定
        Get_Maopi();
        delay_ms(100);
        MPU_Init();        //初始化MPU6050
        while(mpu_dmp_init())                            //初始化mpu_dmp庫
         {
        printf("It's NO\r\n");                //串口初始化失敗上報
        }
        printf("It's OK\r\n");                        //串口初始化成功上報
        delay_ms(999);                                                                        //延時初界面顯示
        mpu6050.flag = 0;                               //采集成功標志位初始化
        mpu6050.speed = 0;                                                                //上報速度初始化
                        
        while(1)   //主循環(huán)
        {
        if(timeCount == 0)
        {
                /********** 壓力傳感器獲取數據**************/
        Weight = Get_Weight();
        printf("%0.3f N \r\n",Weight*9.8);        //串口顯示重力
                /********** mpu6050傳感器獲取數據**************/
        mpu_dmp_get_data( &pitch,&roll,&yaw);
        temp=MPU_Get_Temperature();                        //得到溫度值
        MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度傳感器數據
        MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺儀數據
        
                mpu6050.speed++;                            //上報速度自加
                if(mpu6050.speed == 4)                                                //上報速度閾值設置
                {
                        mpu6050.flag = 1;                                                //采集成功標志位設置為有效
                        mpu6050.speed = 0;                                                //上報速度歸零
                }        
            else                                                                                         //采集不成功                                                                                
        {
                mpu6050.flag = 0;                                                        //采集成功標志位設置為無效
        }        
          if(mpu6050.flag == 1)                                                //采集成功時
        {
                if(temp<0)                                                                //對數據正負判斷,判斷為負時
                {
                        temp=-temp;                                                        //對負數據取反
                }
                else                                    //判斷為正時
                {
                }
                printf("temp:%d.%d,",temp/100,temp%10); //通過串口1輸出溫度
               
                temp=pitch*10;                                                         //賦temp為pitch
                if(temp<0)                                                                //對數據正負判斷,判斷為負時
                {
                        temp=-temp;                                                    //對負數據取反               
                }
                else                                    //判斷為正時
                {
                }
                printf("pitch:%d.%d,",temp/10,temp%10); //通過串口1輸出pitch        
               
                temp=roll*10;                            //賦temp為roll
                if(temp<0)                                                                //對數據正負判斷,判斷為負時
                {
                        temp=-temp;                                                    //對負數據取反        
                }
                else                                    //判斷為正時
                {
                }
                printf("roll:%d.%d,",temp/10,temp%10);//通過串口1輸出roll
               
                temp=yaw*10;                           //賦temp為yaw
                if(temp<0)                                                                //對數據正負判斷,判斷為負時
                {
                        temp=-temp;                                                    //對負數據取反
                }
                else                                    //判斷為正時
                {
                }
        printf("yaw:%d.%d,",temp/10,temp%10);//通過串口1輸出yaw        
        printf("aacx:%d,aacy:%d,aacz:%d\r\n",aacx,aacy,aacz);//上報角速度數據,角加速度數據                                                                                 
        mpu6050.flag = 0;                                                                        //采集成功標志位設置為無效
        }
        else ;                                                                                                                //防卡死
        }
timeCount++;
delay_ms(10);        
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:967636 發(fā)表于 2022-4-7 11:03 | 只看該作者
串口沒有輸出,即使有也卡在It's OK那一步
回復

使用道具 舉報

板凳
ID:121859 發(fā)表于 2022-4-7 13:42 | 只看該作者
使用printf正常的話,需要TI為0,所以初始化的時候,加一條語句:TI=0;
回復

使用道具 舉報

地板
ID:967636 發(fā)表于 2022-4-7 14:24 | 只看該作者
zhxiufan 發(fā)表于 2022-4-7 13:42
使用printf正常的話,需要TI為0,所以初始化的時候,加一條語句:TI=0;

不是很懂 TI=0 ?是主程序的初始化還是usart的初始化?
回復

使用道具 舉報

5#
ID:401564 發(fā)表于 2022-4-7 19:04 | 只看該作者
zhxiufan 發(fā)表于 2022-4-7 13:42
使用printf正常的話,需要TI為0,所以初始化的時候,加一條語句:TI=0;

人家用的是STM32,不是8051
回復

使用道具 舉報

6#
ID:401564 發(fā)表于 2022-4-7 19:08 | 只看該作者
不要一下子一堆代碼,估計你自己都頭暈,更不用說別人了
先是什么都不要,串口初始化之后,用串口函數發(fā)送一個數據到串口,看一下串口初始化是否正確
然后再一步一步來,不要一下寫完整個程序再驗證,問題很難找到的
回復

使用道具 舉報

7#
ID:625730 發(fā)表于 2022-4-9 18:06 | 只看該作者
xuer300 發(fā)表于 2022-4-7 11:03
串口沒有輸出,即使有也卡在It's OK那一步

那可能就是timecount==0的條件一直不滿足,里面的指令就不執(zhí)行了。
回復

使用道具 舉報

8#
ID:139866 發(fā)表于 2022-4-11 14:16 | 只看該作者
你貼這堆代碼有什么用?貼出來usart.c和usart.h文件啊,看看usart怎么配置的,看看printf重定向怎么寫的
回復

使用道具 舉報

9#
ID:470288 發(fā)表于 2022-4-11 16:00 | 只看該作者
可能就是timecount==0的條件一直不滿足,里面的指令就不執(zhí)行了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表