找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1868|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)串口通信控制云臺(tái)姿態(tài)的程序問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本設(shè)計(jì)采用串口通信方式控制云臺(tái)的姿態(tài)和內(nèi)部溫度值,通過串口發(fā)送控制命令+MPULCD ON控制讀取MPU6050姿態(tài)參數(shù),發(fā)送控制命令+TEMLCD ON讀取內(nèi)部溫度參數(shù),并且通過TFTLCD 實(shí)時(shí)顯示各參數(shù)值。

//串口通信顯示函數(shù)錯(cuò)誤,但是TFTLCD能正常顯示MPU6050 參數(shù)值和溫度值

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "tsensor.h"
#include "malloc.h"
#include "sdio_sdcard.h"  
#include "w25qxx.h"   
#include "ff.h"  
#include "exfuns.h"   
#include "text.h"

#include "mpu6050.h"
#include "usmart.h"   
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"
#include "mpulcd.h"
#include "temlcd.h"
#include "string.h"        

int main(void)
{
    u8 key;           
        u16 rlen=0;
                 
        delay_init();                     //延時(shí)函數(shù)初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
        uart_init(115200);            //串口初始化為115200
         LED_Init();                             //LED端口初始化
        KEY_Init();          //初始化與按鍵連接的硬件接口
          usmart_dev.init(72);         //初始化USMART               
        LCD_Init();
    T_Adc_Init();                                  //ADC初始化            
    MPU_Init();                                        //初始化MPU6050
        W25QXX_Init();                                //初始化W25Q128
         my_mem_init(SRAMIN);                //初始化內(nèi)部內(nèi)存池
        exfuns_init();                                //為fatfs相關(guān)變量申請內(nèi)存
    mpu_lcd();
    tem_lcd();         
         f_mount(fs[0],"0:",1);                 //掛載SD卡
         f_mount(fs[1],"1:",1);                 //掛載FLASH.
        while(font_init())                         //檢查字庫
        {

                LCD_Clear(WHITE);                           //清屏
                 POINT_COLOR=RED;                        //設(shè)置字體為紅色                                
                LCD_ShowString(30,50,200,16,16,"ELITE STM32F103 ^_^");        
                while(SD_Init())                        //檢測SD卡
                {
                        LCD_ShowString(30,70,200,16,16,"SD Card Failed!");
                        delay_ms(200);
                        LCD_Fill(30,70,200+30,70+16,WHITE);
                        delay_ms(200);                    
                }                                                                                                                     
                LCD_ShowString(30,70,200,16,16,"SD Card OK");
                LCD_ShowString(30,90,200,16,16,"Font Updating...");
                key=update_font(20,110,16,"0:");//更新字庫
                while(key)//更新失敗               
                {                                          
                        LCD_ShowString(30,110,200,16,16,"Font Update Failed!");
                        delay_ms(200);
                        LCD_Fill(20,110,200+20,110+16,WHITE);
                        delay_ms(200);                       
                }                  
                LCD_ShowString(30,110,200,16,16,"Font Update Success!   ");
                delay_ms(1500);        
                LCD_Clear(WHITE);//清屏               
        }  
        POINT_COLOR=DARKBLUE;      
        Show_Str(30,50,280,16,"基于STM32單片機(jī)無線監(jiān)控系統(tǒng)的設(shè)計(jì)",16,0);                                             
        Show_Str(30,70,200,16,"WIFI-通信測試程序",16,0);
    POINT_COLOR=RED;         
        Show_Str(30,90,200,16,"作者:LuX",16,0);                                             
        Show_Str(30,110,200,16,"日期:2019年4月10日",16,0);
        Show_Str(30,130,200,16,"按KEY0,更新字庫",16,0);        
        LCD_ShowString(30,150,200,16,16,"TEMPERATE: 00.00C");
    while(mpu_dmp_init())
         {
                LCD_ShowString(30,170,200,16,16,"MPU6050 Error");
                delay_ms(200);
                LCD_Fill(30,170,239,130+16,WHITE);
                 delay_ms(200);
        }  
        LCD_ShowString(30,170,200,16,16,"MPU6050 IS OK!");
         POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色      
        
        LCD_ShowString(30,190,200,16,16," Temp:    . C");        
         LCD_ShowString(30,210,200,16,16,"Pitch:    . C");        
         LCD_ShowString(30,230,200,16,16," Roll:    . C");         
         LCD_ShowString(30,250,200,16,16," Yaw :    . C");
//        LCD_ShowString(30,270,200,16,16,"Send:");        
        LCD_ShowString(30,270,200,16,16,"Receive:");
        USART_RX_STA=0;
        

        while(1)
        {
               
                if(USART_RX_STA&0X8000)                        //接收到一次數(shù)據(jù)了
                {
                        LCD_Fill(30,290,240,320,WHITE);        //清除顯示
                         rlen=USART_RX_STA&0X7FFF;        //得到數(shù)據(jù)長度
                          USART_RX_BUF[rlen]=0;                 //加入結(jié)束符
                        
//紅色部分可以這樣嗎?串口里面會(huì)報(bào)錯(cuò)?有沒有大神有好的解決方法//
                                if(strcmp((const char*)USART_RX_BUF,"+TEMLCD ON")==0)//關(guān)閉LED1
                                {
                                   tem_lcd();
                                }
                                if(strcmp((const char*)USART_RX_BUF,"+MPULCD ON")==0)//關(guān)閉LED1
                                {
                                   mpu_lcd();
                                }
                                                        
                         LCD_ShowString(30,290,209,119,16,USART_RX_BUF);//顯示接收到的數(shù)據(jù)
                         USART_RX_STA=0;         
                }
        
        }
                 
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表