2013-03-03
這是研一上學期《實時嵌入式系統實驗》課程的大作業,是利用野火板的資源,加上一個AHRS(Attitude and Heading Reference System,姿態航向系統參考模塊)模塊,利用重力感應控制小球在迷宮中前進。
重力感應模塊。開始,我在網上買了一個野火版的擴展模塊——MMA7455三軸加速度傳感器,36塊錢,I2C總線。
野火附贈例程裡相關例子,用的I2C1(STM32F103VET6有兩個硬件I2C,I2C1和I2C2),經測試可用。但是遇到一個問題,I2C1的PB6-I2C1SCL和PB7-I2C1SDA兩個引腳被觸摸屏XPT2046的信號線占用(PB6:XPT2046-INT ,PB7:XPT2046-CS),使用I2C2總是遇到錯誤,想用軟件I2C,在網上找到一些代碼,也沒移植成功,所以買到的MMA7455就不能用了。同組的同學從師兄那裡借到一個AHRS模塊(介紹在此),核心是塊STM32F103T8,燒入程序後,模塊就能把解算出的當前俯仰、橫滾、航向、氣壓高度和溫度數據通過串口源源不斷發送出來。相對於兩個軸的傾角數據(俯仰角和滾轉角)對於我足矣,所以我修改了發送協議,讓模塊只發送俯仰角和滾轉角。原來的數據是在串口助手上顯示的,看起來是浮點型,本質是字符串,我不需要這麼高的精度,所以我把它平移若干位,變成8位整形數據,並修改了發送頻率,大約(采用軟件延時)5Hz。 為方便調試,我讓AHRS模塊的數據通過USART3發到野火板的同時,野火板通過USART1把數據轉發PC,在PC串口助手上顯示。接收可用USARTReceiveData()完成,發送可用庫函數USARTSendData()完成,注意需等待確實發送完畢再進行下一步,不然容易出錯,而且收發的數據都是uint16t型。
a=USARTReceiveData(USART3); `//接受數據
while(USARTGetFlagStatus(USART1, USARTFLAG_TC) == RESET); ` //等待發送完成
野火板我們使用了USART1和USART3、觸摸屏、SD卡、文件系統以及漢字字庫,根據野火自帶例程修改而來。在SD卡裡放置背景圖片,BMP格式。在顯示不同圖片以及跳入、跳出循環時,注意觸摸標志位等的置位的清零。
PS:游戲准備和完成時顯示的圖片是由組裡某位女同學用PhotoShop制作的,真心感覺漂亮,反正我是做不出來的……