標(biāo)題: 為啥C語(yǔ)言printf打印不出需要的數(shù)據(jù)?不知是哪卡死了 [打印本頁(yè)]

作者: xuer300    時(shí)間: 2022-4-7 11:02
標(biāo)題: 為啥C語(yǔ)言printf打印不出需要的數(shù)據(jù)?不知是哪卡死了
求助:傳感器初始化順序調(diào)整了也沒(méi)有變化,while(1)中循有if{if{}},為何執(zhí)行不同,是delay_ms的問(wèn)題嗎?
C語(yǔ)言程序如下:
#include "stdio.h"//標(biāo)準(zhǔn)輸入輸出庫(kù)
#include "string.h"//字符串庫(kù)
#include "stdlib.h"//常用的系統(tǒng)函數(shù)庫(kù)
#include "sys.h"//系統(tǒng)中斷分組庫(kù)
#include "delay.h"//延時(shí)函數(shù)庫(kù)
#include "usart.h"//串口設(shè)置庫(kù)
#include "mpu6050.h"//MPU6050驅(qū)動(dòng)庫(kù)
#include "inv_mpu.h"//陀螺儀驅(qū)動(dòng)庫(kù)
#include "inv_mpu_dmp_motion_driver.h" //DMP姿態(tài)解讀庫(kù)

float Weight = 0;

u8 tmp_buf[33];                        //字符串?dāng)?shù)組
struct MPU6050                                //MPU6050結(jié)構(gòu)體
{
        u8 flag;                                //采集成功標(biāo)志位
        u8 speed;                                //上報(bào)速度
}mpu6050;                                        //唯一結(jié)構(gòu)體變量

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

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



作者: xuer300    時(shí)間: 2022-4-7 11:03
串口沒(méi)有輸出,即使有也卡在It's OK那一步
作者: zhxiufan    時(shí)間: 2022-4-7 13:42
使用printf正常的話,需要TI為0,所以初始化的時(shí)候,加一條語(yǔ)句:TI=0;
作者: xuer300    時(shí)間: 2022-4-7 14:24
zhxiufan 發(fā)表于 2022-4-7 13:42
使用printf正常的話,需要TI為0,所以初始化的時(shí)候,加一條語(yǔ)句:TI=0;

不是很懂 TI=0 ?是主程序的初始化還是usart的初始化?
作者: Y_G_G    時(shí)間: 2022-4-7 19:04
zhxiufan 發(fā)表于 2022-4-7 13:42
使用printf正常的話,需要TI為0,所以初始化的時(shí)候,加一條語(yǔ)句:TI=0;

人家用的是STM32,不是8051
作者: Y_G_G    時(shí)間: 2022-4-7 19:08
不要一下子一堆代碼,估計(jì)你自己都頭暈,更不用說(shuō)別人了
先是什么都不要,串口初始化之后,用串口函數(shù)發(fā)送一個(gè)數(shù)據(jù)到串口,看一下串口初始化是否正確
然后再一步一步來(lái),不要一下寫(xiě)完整個(gè)程序再驗(yàn)證,問(wèn)題很難找到的
作者: TEC    時(shí)間: 2022-4-9 18:06
xuer300 發(fā)表于 2022-4-7 11:03
串口沒(méi)有輸出,即使有也卡在It's OK那一步

那可能就是timecount==0的條件一直不滿(mǎn)足,里面的指令就不執(zhí)行了。
作者: 天ノ憶    時(shí)間: 2022-4-11 14:16
你貼這堆代碼有什么用?貼出來(lái)usart.c和usart.h文件啊,看看usart怎么配置的,看看printf重定向怎么寫(xiě)的
作者: 初墨啊    時(shí)間: 2022-4-11 16:00
可能就是timecount==0的條件一直不滿(mǎn)足,里面的指令就不執(zhí)行了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1