單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 課件 任務9.2 兩臺STM32單片機UART通信系統(tǒng)的設計與調(diào)試_第1頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 課件 任務9.2 兩臺STM32單片機UART通信系統(tǒng)的設計與調(diào)試_第2頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 課件 任務9.2 兩臺STM32單片機UART通信系統(tǒng)的設計與調(diào)試_第3頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 課件 任務9.2 兩臺STM32單片機UART通信系統(tǒng)的設計與調(diào)試_第4頁
單片機產(chǎn)品設計與調(diào)試-基于STM32F1xx機型和HAL庫函數(shù) 課件 任務9.2 兩臺STM32單片機UART通信系統(tǒng)的設計與調(diào)試_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

單片機產(chǎn)品設計與制作

(stm32機型)石梅香項目9、利用UART實現(xiàn)LED燈控制任務9.2兩臺STM32UART通信系統(tǒng)的設計與調(diào)試總目錄1項目1、利用GPIO和位帶操作實現(xiàn)溫度報警

2項目2、利用SysTick實現(xiàn)溫度報警與控制

3項目3、利用按鍵查詢實現(xiàn)參數(shù)設定及顯示

4項目4、利用外部中斷實現(xiàn)工件計數(shù)顯示

5項目5、利用定時器實現(xiàn)直流電動機PWM調(diào)速6項目6、利用計數(shù)器實現(xiàn)工件計數(shù)顯示和打包控制

7項目7、利用DAC實現(xiàn)LED亮度控制8項目8、利用ADC實現(xiàn)土壤濕度采集

項目總目標項目總目標通過UART與UART通信、UART與PC機通信等工作任務,掌握UART通信電路與程序設計方法。具體包括:1、了解單片機串行通信基本概念,能夠說出串行通信特點與分類;2、理解STM32F10x的UART結構組成與工作特性,能夠?qū)φ战Y構框圖說出其基本工作過程;3、掌握基于STM32F10xUART的電路設計方法,能進行基本獨立設計與調(diào)試;4、掌握基于HAL庫函數(shù)的STM32F10xUART編程方法,能獨立編程實現(xiàn);5、會查找相關資料、閱讀相關文獻。子目錄9項目9、利用UART實現(xiàn)LED燈控制9.1任務9.1 認識STM32單片機的USART9.2任務9.2 兩臺STM32UART通信系統(tǒng)的設計與調(diào)試9.3任務9.3 STM32UART與PC機通信系統(tǒng)設計與調(diào)試任務9.2兩臺STM32UART通信系統(tǒng)的設計與調(diào)試一、任務要求(一)總目標1、能畫出兩臺STM32UART通信電路;2、能利用HAL_UART_Receive()和HAL_UART_Transmit()庫函數(shù)編寫兩臺STM32UART通信程序。(二)具體任務描述按下1#機K_UP鍵(PA0): 點亮2#機LED0;按下1#機K_DOWN鍵(PE2): 熄滅2#機LED0;按下1#機K_LEFT鍵(PE3): 點亮2#機LED0~LED7;按下1#機K_RIGHT鍵(PE4): 熄滅2#機LED0~LED7。分組討論要實現(xiàn)兩臺STM32的UART通信,電路和程序應該怎樣設計討論與發(fā)言方案設計圖9.2.1系統(tǒng)方框圖電路設計由于1#機只發(fā)送,2#機只接收,圖中虛線也可以不接程序設計與調(diào)試1、1#程序文件布局與框架搭建程序設計與調(diào)試2、1#程序流程圖程序設計與調(diào)試3、1#程序主程序(1)第5行:聲明UART操作變量UART1_Handler,指出它是一個extern型變量(該變量在文件uart.c中被定義),數(shù)據(jù)類型是UART_HandleTypeDef。關于UART_HandleTypeDef類型詳情參見表9.2.1。(2)第7行:定義變量TX_Char,該變量用于存儲準備從UART發(fā)送的數(shù)據(jù)。(3)第13行,調(diào)用函數(shù)UART1_Init(),初始化UART。該函數(shù)在uart.c中定義,帶一個參數(shù),用于指出波特率,這里是9600bps。(4)第16~20行:進行按鍵采集,根據(jù)按鍵情況為變量TX_Char賦值。第22行:使用了庫函數(shù)HAL_UART_Transmit(),將變量TX_Char的值送入UART進行發(fā)送。該函數(shù)共有4個參數(shù)程序設計與調(diào)試4、1#UART程序設計程序設計與調(diào)試4、1#UART程序設計(1)第2行:定義UART操作變量名為UART1_Handler,數(shù)據(jù)類型固定為UART_HandleTypeDef,用于指出用哪個UART,怎么發(fā)送或接收,具體要求參見表9.2.1。(2)第4~14行:UART初始化函數(shù)。該函數(shù)帶一個參數(shù)baund,用于指出波特率。(3)第5~11行用于設置變量UART1_Handler,指出使用USART1,波特率=bound、數(shù)據(jù)位+校驗位字長=8、1個停止位、無校驗位、無硬件流控制、數(shù)據(jù)發(fā)送和接收模式。對于本應用,由于1#機只進行數(shù)據(jù)發(fā)送,也可將其設置為數(shù)據(jù)發(fā)送模式(UART_MODE_TX)。(4)第13行調(diào)用UART初始化庫函數(shù)HAL_UART_Init(),按照變量UART1_Handler的值進行UART初始化。該庫函數(shù)定義參見表9.2.2。(5)第19~35行:執(zhí)行UART初始化庫函數(shù)HAL_UART_Init()時,會自動調(diào)用庫函數(shù)HAL_UART_MspInit()。此庫函數(shù)內(nèi)容可自行編寫。我們在這里開啟USART1和GPIOA時鐘,初始化USART1的引腳PA9(Tx)和PA10(Rx)。注意PA9應設置為復用推挽輸出,PA10應設置為復用輸入。程序設計與調(diào)試5、UART相關庫函數(shù)解讀表9.2.1

UART操作變量UART操作變量數(shù)據(jù)類型:

UART_HandleTypeDef

typedef

struct

{ USART_TypeDef *Instance;

//UART名,取值有5個:USART1~USART3、UART4~UART5

UART_InitTypeDef

Init;

//UART初始化參數(shù),定義見本表第3、4行

uint8_t *pTxBuffPtr;

//UART發(fā)送緩沖區(qū)首地址,指針變量

uint16_t TxXferSize;

//UART發(fā)送緩沖區(qū)長度

uint16_t TxXferCount;

//UART發(fā)送計數(shù)器uint8_t *pRxBuffPtr;

//UART接收緩沖區(qū)首地址,指針變量

uint16_t RxXferSize;

//UART接收緩沖區(qū)長度

uint16_t RxXferCount;

//UART接收計數(shù)器

DMA_HandleTypeDef *hdmatx;

//DMA

發(fā)送參數(shù)

DMA_HandleTypeDef *hdmarx;

//DMA

接收參數(shù)HAL_LockTypeDef Lock;

//鎖定對象

__IO

HAL_UART_StateTypeDefgState;

//發(fā)送狀態(tài)

__IO

HAL_UART_StateTypeDefRxState //接收狀態(tài)__IOuint32_t ErrorCode;

//錯誤代碼}UART_HandleTypeDef;

UART初始化數(shù)據(jù)類型:

UART_InitTypeDeftypedef

struct

{ uint32_t BaudRate;

//波特率

uint32_t WordLength;

//字長(數(shù)據(jù)位+奇偶校驗位)

,有8位和9位兩個取值://UART_WORDLENGTH_8B(8位)、

UART_WORDLENGTH_9B(9位)uint32_t StopBits;

//停止位,有1和2兩個取值:UART_STOPBITS_1、UART_STOPBITS_2uint32_t Parity;

//奇偶校驗位,有三個取值://UART_PARITY_NONE(無)、UART_PARITY_EVEN(偶)

、UART_PARITY_ODD(奇)

uint32_t Mode;

//模式,有三個取值://UART_MODE_RX(接收)、UART_MODE_TX(發(fā)送)、UART_MODE_TX_RX(發(fā)送-接收)uint32_t HwFlowCtl;

//硬件流控制,有四個取值:UART_HWCONTROL_NONE(無)、

//UART_HWCONTROL_RTS、UART_HWCONTROL_CTS、UART_HWCONTROL_RTS_CTS uint32_t OverSampling;

//過采樣系數(shù),默認為16。如果定義了USART_CR1_OVER8,則默認為8。

}UART_InitTypeDef;程序設計與調(diào)試5、UART相關庫函數(shù)解讀表9.2.2

UART初始化庫函數(shù)UART初始化函數(shù):

HAL_UART_Init(&UART操作變量)函數(shù)原型:HAL_StatusTypeDefHAL_UART_Init(UART_HandleTypeDef

*huart)

功能:初始化UART,并隱性調(diào)用庫函數(shù)HAL_UART_MSPInit()。入口參數(shù):huart,指出對哪個UART/USART進行初始化,如何初始化。數(shù)據(jù)類型為:

UART_HandleTypeDef

,結構體變量,其定義見表9.2.1。返回值:類型為HAL_StatusTypeDef,有四個取值:HAL_OK=0x00;

HAL_ERROR=0x01;

HAL_BUSY=0x02;

HAL_TIMEOUT=0x03

UART初始化隱性調(diào)用函數(shù):

HAL_UART_MSPInit(UART_HandleTypeDef

*huart)函數(shù)原型:__weakvoidHAL_UART_MSPInit(UART_HandleTypeDef

*huart)

功能:會被

HAL_UART_Init()自動調(diào)用,用于完善UART初始化內(nèi)容,例如開啟UART時鐘,初始化相關引腳,設置中斷等。程序設計與調(diào)試5、UART相關庫函數(shù)解讀表9.2.3

UART發(fā)送庫函數(shù)(查詢方式)查詢發(fā)送函數(shù):

HAL_UART_Transmit(&UART操作變量,&數(shù)據(jù)首地址,數(shù)據(jù)個數(shù),超時時間)函數(shù)原型:HAL_StatusTypeDef

HAL_UART_Transmit(UART_HandleTypeDef

*huart,

uint8_t

*pData,

uint16_t

Size,

uint32_t

Timeout)功能:按照huart的設置,以查詢方式進行UART數(shù)據(jù)發(fā)送。發(fā)送數(shù)據(jù)的首地址由pData指出,數(shù)據(jù)串長度是Size,超時時間是Timeout。入口參數(shù)1:huart,是UART操作變量,數(shù)據(jù)類型為UART_HandleTypeDef

,結構體變量。指出用哪個USART/UART發(fā)送。入口參數(shù)2:pData,發(fā)送數(shù)據(jù)緩沖區(qū)首地址,指針變量。入口參數(shù)3:size,發(fā)送緩沖區(qū)長度。入口參數(shù)4:Timeout,超時時間,單位是ms。返回值:HAL_StatusTypeDef,有四個取值:HAL_OK=0x00;

HAL_ERROR=0x01;

HAL_BUSY=0x02;

HAL_TIMEOUT=0x03表9.2.4

UART接收庫函數(shù)(查詢方式)查詢接收函數(shù):

HAL_UART_Receive(&UART操作變量,&數(shù)據(jù)首地址,數(shù)據(jù)個數(shù),超時時間)函數(shù)原型:HAL_StatusTypeDef

HAL_UART_Receive(UART_HandleTypeDef

*huart,

uint8_t

*pData,

uint16_t

Size,

uint32_t

Timeout)功能:按照huart的設置,以查詢方式進行UART數(shù)據(jù)接收。接收數(shù)據(jù)首地址由pData指出,數(shù)據(jù)串長度是Size,超時時間是Timeout。入口參數(shù)1:huart,是UART操作變量,數(shù)據(jù)類型為UART_HandleTypeDef

,結構體變量。指出用哪個USART/UART接收。入口參數(shù)2:pData,接收數(shù)據(jù)緩沖區(qū)首地址,指針變量。入口參數(shù)3:size,接收緩沖區(qū)長度。入口參數(shù)4:Timeout,超時時間,單位是ms。返回值:HAL_StatusTypeDef,有四個取值:HAL_OK=0x00;

HAL_ERROR=0x01;

HAL_BUSY=0x02;

HAL_TIMEOUT=0x03程序設計與調(diào)試6、按鍵程序程序設計與調(diào)試7、利用串口調(diào)試助手調(diào)試程序1、下載程序到開發(fā)板對以上程序進行編譯生成,無錯后下載到1#開發(fā)板。2、安裝串口調(diào)試助手3、安裝CH340驅(qū)動4、打開調(diào)試助手調(diào)試程序程序設計與調(diào)試7、調(diào)試程序設計與調(diào)試8、2#機程序設計程序文件布局與框架搭建和流程圖程序設計與調(diào)試8、2#主程序設計(1)第6行:定義變量RX_Char,該變量用于存儲從UART接收到的數(shù)據(jù)。(2)第11行,初始化UART1,注意波特率必須和1#機相同。(3)第13行:使用了庫函數(shù)HAL_UART_Receive(),將UART收到的數(shù)據(jù)存入變量RX_Char。與庫函數(shù)HAL_UART_Transmit()類似,也有4個參數(shù),只是第2個參數(shù)用于指出將收到的數(shù)據(jù)存到哪里。(4)第14~24行:對收到的數(shù)據(jù)進行判別,根據(jù)輸入命令的不同,控制LED亮滅。有關庫函數(shù)HAL_UART_Receive()的解釋,詳見表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論