一、USART簡介
USART是一個全雙工通用同步/異步串行收發模塊,該介面是一個高度靈活的串行通信設備,
主要特點:
- 全雙工操作(相互獨立的接收資料和發送資料);
- 同步操作時,可主機時鐘同步,也可從機時鐘同步;
- 獨立的高精度波特率發生器,不占用定時/計數器;
- 支持5、6、7、8和9位資料位,1或2位停止位的串行資料楨結構;
- 由硬體支持的奇偶校驗位發生和檢驗;
- 資料溢位檢測;
- 幀錯誤檢測;
- 包括錯誤起始位的檢測噪聲濾波器和數字低通濾波器;
- 三個完全獨立的中斷,TX發送完成、TX發送資料暫存器空、RX接收完成;
- 支持多機通信模式;
- 支持倍速異步通信模式,
結構組成:
USART收發模塊一般分為三大部分:時鐘發生器、資料發送器和接收器,控制暫存器為所有的模塊共享,
時鐘發生器由同步邏輯電路(在同步從模式下由外部時鐘輸入驅動)和波特率發生器組成,發送時鐘引腳XCK僅用于同步發送模式下,發送器部分由一個單獨的寫入緩沖器(發送UDR)、一個串行移位暫存器、校驗位發生器和用于處理不同幀結構的控制邏輯電路構成,使用寫入緩沖器,實作了連續發送多幀資料無延時的通信,
接收器是USART模塊最復雜的部分,最主要的是時鐘和資料接收單元,資料接收單元用作異步資料的接收,除了接收單元,接收器還包括校驗位校驗器、控制邏輯、移位暫存器和兩級接識訓沖器(接收UDR),接收器支持與發送器相同的幀結構,同時支持幀錯誤、資料溢位和校驗錯誤的檢測,
二、USART圖示

三、基于暫存器與基于韌體庫的stm32 LED流水燈例子的編程方式差異比較:
1、基于暫存器方式的開發特點:
(1)具體引數更直觀;
(2)程式運行占用資源少,
但是它的缺陷也不可忽視,如下:
(1)開發速度慢;
(2)程式可讀性差;
(3) 維護復雜,
上述缺陷直接影響了開發效率,程式維護成本,交流成本,通常情況下,只有在頻繁呼叫的中斷服務函式時利用直接配置暫存器的方式,
2、基于固態庫方式開發,也就是直接呼叫庫函式,特點就是:
(1)外設交流方便;
(2)查錯簡單;
(3)對主控制器STM32上手簡單,
總的來說基于暫存器:資料豐富,容易理解,適合新手學習,
基于韌體庫:可移植性強,更貼近底層,要求對作業原理有深入理解,適合有豐富經驗的人使用,
四、STM32的USART串口通信程式實體
-
打開下載的官方資料包,安裝野火串口除錯助手

-
在官方資料庫中找到USART1接發檔案夾下的keil工程檔案,打開工程

- 打開stm32f10x_it.c檔案做如下修改:

- 打開main.c檔案做如下修改:

修改的代碼如下
- stm32f10x_it.c:
int i=0;
uint8_t ucTemp[50];
void DEBUG_USART_IRQHandler(void)
{
if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
{
ucTemp[i] = USART_ReceiveData(USART1);
}
if(ucTemp[i] == '!')
{
if(ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's'&&ucTemp[i-6] == ' ')
if(ucTemp[i-7] == 'p'&&ucTemp[i-8] == 'o'&&ucTemp[i-9] == 't'&&ucTemp[i-10] == 's')
{
printf("收到!");
while(1);
}
}
i++;
}
- main.c:
#include "stm32f10x.h"
#include "bsp_usart.h"
void delay(uint32_t count)
{
while(count--);
}
int main(void)
{
USART_Config();
while(1)
{
printf("hello windows!\n");
delay(5000000);
}
}
- 編譯除錯顯示未出錯后,

點擊魔法棒

進入后選擇debug,在Use下選擇J-Link連接

setting


一切就緒,點擊load將程式燒錄進芯片
打開野火的串口除錯助手

可以看到STM32系統給上位機(win10)連續發送“hello windows!
當上位機給stm32發送“Stop,stm32”后,stm32停止發送,
任務完成!
五、參考資料
stm32的串口通信
STM32串口通信USART學習筆記
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231057.html
標籤:其他
上一篇:第四次學習記錄(ROS)
下一篇:STM32串口通信
