本設計采用串口通信方式控制云臺的姿態和內部溫度值,通過串口發送控制命令+MPULCD ON控制讀取MPU6050姿態參數,發送控制命令+TEMLCD ON讀取內部溫度參數,并且通過TFTLCD 實時顯示各參數值。
//串口通信顯示函數錯誤,但是TFTLCD能正常顯示MPU6050 參數值和溫度值
捕獲.PNG (17.16 KB, 下載次數: 27)
下載附件
2019-4-14 13:06 上傳
#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(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
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); //初始化內部內存池
exfuns_init(); //為fatfs相關變量申請內存
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; //設置字體為紅色
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單片機無線監控系統的設計",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;//設置字體為藍色
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) //接收到一次數據了
{
LCD_Fill(30,290,240,320,WHITE); //清除顯示
rlen=USART_RX_STA&0X7FFF; //得到數據長度
USART_RX_BUF[rlen]=0; //加入結束符
//紅色部分可以這樣嗎?串口里面會報錯?有沒有大神有好的解決方法//
if(strcmp((const char*)USART_RX_BUF,"+TEMLCD ON")==0)//關閉LED1
{
tem_lcd();
}
if(strcmp((const char*)USART_RX_BUF,"+MPULCD ON")==0)//關閉LED1
{
mpu_lcd();
}
LCD_ShowString(30,290,209,119,16,USART_RX_BUF);//顯示接收到的數據
USART_RX_STA=0;
}
}
}
|