USART和UART配置的區別
如果USART使用的是異步通信,那么UART與USART配置基本相同。
USART配置如下:
UART配置如下:
如果USART使用的是同步通信,那么UART配置就有差異。
-
首先通信雙方都是使用USART的同步通信,一個主機,一個從機。
-
USART同步通信使用的結構體就不一樣
USART使用同步通信的結構體為:
USART異同通信使用的結構體
-
從結構體中就可以看出二者的差別,那么不同的地方怎么配置呢?這個問題我想就必須要看用戶手冊了,因為官方好像沒有給出例程。
-
從官方用戶手冊的文件描述可以看出,配置為主機模式的步驟和說明
-
從官方用戶手冊的文件描述可以看出,配置為從機模式的步驟和說明
- 文檔中說操作對應寄存器的位,但是官方的函數中沒有提供對應的函數,我們可以這樣做:
這里以USART1為例,配置主機模式,從機模式類似就不做過多的說明。
寄存器對應位的配置一定要看用戶手冊,否則容易出問題,比如CR3寄存器的HDSEL位就有如下要求:
注意:我上面的配置不一定能夠成功,我沒有測試過。為什么沒有測試,因為我只有一塊這樣的板。尷尬!
清除串口寄存器位的注意事項
清除串口狀態寄存器ISR的位,還是之前的那句話"一定要看用戶手冊",當然如果是調用官方的庫函數,當我沒說。如果是自己編寫的函數來清除對應的狀態位,就一定要看用戶手冊。
比如我需要清除ISR寄存器的ORE位(下圖中已經明確了,只能讀),如果是按照經驗可能會這樣操作
但是當我們閱讀用戶手冊對該寄存器對應位的描述時,就會發現問題所在,如下圖。
根據用戶手冊中的描述清楚ISR寄存器的ORE位的操作為:
使用官方庫函數進行清楚ISR對應位
下圖就是官方的庫函數,用以清除狀態。從官方的庫函數中也可以看出使用的ICR寄存器。
- HANDLE:就是USART_HandleTypeDef結構體定義的husart1
- FLAG:就是要清楚的狀態位,官方的庫函數的描述中有給出哪些狀態可以被該函數清除。
從上面的也可以看出官方宏定義的與官方的用戶手冊寄存器是相關的(命名等),特別是對應寄存器的位。
當然看英文文檔是非常痛苦的一件事情,但是痛就痛吧,無所畏懼。