姓名:趙宗明
學號:19021211230
【嵌牛導讀】:STM32 ? ?串口通信 ? ?數(shù)據(jù)包
【嵌牛鼻子】:利用電腦端通過串口通信控制單片機內部的參數(shù)以及單片機內部數(shù)據(jù)包向電腦端傳輸并顯示
【嵌牛提問】:串行接口是連接單片機和PC機的一種簡單方式平窘。單片機一個字節(jié)是如何收發(fā)的?一串數(shù)據(jù)是如何收發(fā)的蒋失?電腦端一個字節(jié)鸿脓、一串數(shù)據(jù)是如何收發(fā)的删窒?這個項目向大家展示了如何使用電腦端與單片機進行數(shù)據(jù)包的相互傳遞枫甲。
【嵌牛正文】:
1.實驗介紹
本實驗主要用到了STM32的串口模塊、IIC模塊副瀑,定時器模塊、LED模塊恋谭,借助了開源的MPU6050所使用的DMP庫糠睡,還使用了基于G語言圖形化編程的Labview軟件開發(fā)的上位機。MCU通過IIC協(xié)議實時向MPU-6050傳感器讀取數(shù)據(jù)并打包發(fā)送至上位機箕别,并在電腦端以波形的形式實時顯示傳感器的角度數(shù)據(jù)铜幽。同時電腦端發(fā)送四個角度值數(shù)據(jù)至MCU作為角度的報警值滞谢,傳感器將此四個數(shù)據(jù)作為兩個軸的(俯仰角串稀、翻滾角)角度界限,當角度超過這四個界限值時以4個LED作為報警提醒用戶狮杨。
2.實驗目的
·熟練使用串口收發(fā)模塊母截,掌握串口收發(fā)的原理和具體實現(xiàn)方法。
·熟練掌握MCU與上位機的雙向通信方式和數(shù)據(jù)包的傳輸及校驗方式橄教。
3.實驗內容
任務要求:MCU利用IIC協(xié)議向MPU-6050傳感器獲取數(shù)據(jù)清寇,并將數(shù)據(jù)傳輸至DMP模塊喘漏,進行數(shù)據(jù)的解算得到傳感器的實時角度,并將實時的角度通過串口發(fā)送至電腦端华烟,電腦端獲取角度數(shù)據(jù)并以波形的形式實時顯示翩迈,同時,用戶可以在上位機操作界面輸入角度的界限值盔夜,實現(xiàn)下位機的光報警功能负饲。
軟件工具以及硬件平臺:
開發(fā)軟件利用了KeilSoftware官方提供的Keil5和美國國家儀器(NI)公司研制Labview圖形化編程環(huán)境。
硬件使用了ST公司內核為Cortex-M3的Stm32f103-vet6喂链,基于C語言編程開發(fā)返十。
4.實驗原理及實現(xiàn)方法
該設計主要包括以下幾個重要模塊:波特率產生模塊、數(shù)據(jù)包接收模塊椭微、數(shù)據(jù)包發(fā)送模塊洞坑、LED控制模塊、上位機蝇率、IIC模塊迟杂。
以下為該設計的實現(xiàn)框圖:
4.1模塊設計
波特率產生模塊:
波特率表示每秒鐘傳送的碼元符號的個數(shù),是衡量數(shù)據(jù)傳送速率的指標本慕,它用單位時間內載波調制狀態(tài)改變的次數(shù)來表示逢慌。可以利用70M系統(tǒng)時鐘通過計數(shù)的方式產生115200波特率模塊連接至發(fā)送和接收模塊间狂。當RX或TX模塊發(fā)來波特率請求信號時攻泼,波特率產生模塊開始計數(shù),當計數(shù)值達到數(shù)據(jù)發(fā)送或接收所需數(shù)值時模塊產生輸出鉴象,TX或RX接收到信號時便執(zhí)行發(fā)送或接收的操作忙菠。本設計利用了庫函數(shù)的方式,選擇了115200的傳輸波特率纺弊。
串口發(fā)送模塊:
?????? 串口發(fā)送數(shù)據(jù)包的基礎是:串口正確發(fā)送一個字節(jié)的數(shù)據(jù)牛欢。串口發(fā)送一幀(一個字節(jié))數(shù)據(jù)的格式為:起始位+8bit數(shù)據(jù)+停止位,所以發(fā)送一組數(shù)據(jù)實際傳輸?shù)臄?shù)據(jù)為10bit淆游。該設計數(shù)據(jù)發(fā)送涉及多個數(shù)據(jù)的傳輸傍睹,所以采用了數(shù)據(jù)包的方式利用幀頭幀尾校驗進行數(shù)據(jù)傳輸及解析。MCU端串口發(fā)送格式為:
0XA5(幀頭)+ AngleX_H + Angle X_L + + AngleY_H + Angle Y_L + 0XC5(幀尾)犹菱。上位機接收端利用同樣的格式利用狀態(tài)機的方式解析數(shù)據(jù)拾稳,并將其實時顯示。因為串口每次發(fā)送一幀數(shù)據(jù)(一個字節(jié))腊脱,所以16位的數(shù)據(jù)必須將其拆分為高8位和低8位再將其發(fā)送访得,接收端接收到后在將兩個8位數(shù)據(jù)整合為16位數(shù)據(jù)。
以下為數(shù)據(jù)發(fā)送的具體實現(xiàn)方法:
串口接收模塊:
串口接收模塊較串口發(fā)送更為復雜陕凹,因為串口要想從數(shù)據(jù)包中得到有效數(shù)據(jù)就得確保接收正確的數(shù)據(jù)包并無誤的將其解析悍抑。串口接收模塊和串口發(fā)送模塊調用同樣的波特率產生模塊鳄炉,均在該波特率下所計算的計數(shù)值處進行數(shù)據(jù)的收發(fā)。同樣搜骡,接收數(shù)據(jù)包的基礎是穩(wěn)定的接收一幀數(shù)據(jù)拂盯。
接收一幀數(shù)據(jù)的原理:Stm32的RX引腳是一位一位串行的得到信號,因為發(fā)送端發(fā)送一幀數(shù)據(jù)的格式為:起始位+8bit數(shù)據(jù)+停止位记靡,所以接收端也應該以該格式去解析數(shù)據(jù)磕仅,觀察下圖
本設計需要接收數(shù)據(jù)包,也就是需要解析多幀數(shù)據(jù)簸呈,該設計中利用了串口中斷的方式去解析有效數(shù)據(jù)榕订。
電腦端發(fā)送數(shù)據(jù)的格式為:、
‘空格’+ ‘元素號’+‘:’+‘數(shù)據(jù)’(例:“0:12 1:24 2:48 3:64”)蜕便,因為電腦端發(fā)送字符比較簡單劫恒,所以本設計采用了電腦端發(fā)送字符數(shù)據(jù),在MCU上解析為十進制數(shù)據(jù)轿腺。具體實現(xiàn)方法如下: