串行通信與并行通信
設備之間的通信方式可以分為串行通信和并行通信,這兩種通信方式各有優缺點。串行通信是將數據按位順序傳輸,這樣做的優勢是占用的引腳資源少,對于引腳資源緊張的MCU來大有益處,但是由于每次只能傳輸一個數據,造成了傳輸速度較慢的劣勢(相對并行傳輸)。并行通信就是數據的各個位同時傳輸,優點是數據傳輸快,缺點是占用引腳資源較多。
串行通信按照傳輸方向又分為單工、半雙工和全雙工。單工可以理解為只能向著一個方向傳輸數據,半雙工就是可以雙向傳輸,但每次只能有一個傳輸方向,全雙工就是既可以雙向傳輸,它又可以同時有兩個傳輸方向。按照通信方式又可以分為同步通信和異步通信;同步通信需要時鐘線(用作時鐘信號的同步)的參與,例如SPI和IIC通信接口,而異步通信就是不帶時鐘線的,例如UART和one-wire。
STM32提供了UART(Universal Asynchronous Receiver/Transmitter,通用異步收發器)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步異步收發器)兩種串口通信接口,用于實現與其他設備之間的數據交換。本文將介紹STM32串口通信的基礎知識,幫助讀者理解和掌握其基本原理和配置方法。
STM32串口通信
STM32的串口通信模塊主要包括UART和USART兩種接口。
UART是一種異步通信協議,它使用起始位、數據位、校驗位和停止位來定義一個字符的傳輸格式。USART則是一種同步/異步通信協議,它支持全雙工通信,并具備更高的數據傳輸速率和更好的抗干擾能力。
在常見的STM32F103C8T6中,根據芯片手冊可以得知該型號具備3個USART,但也可以作為UART使用。UART引腳TXD為數據輸出引腳,RXD為數據輸入引腳,兩個設備之間的UART連接為TXD和RXD交叉連接,也需要將GND連接在一起。在需要將UART設備連接其他通信接口設備連接時,則需要電平轉換芯片,例如CH340(USB轉TTL)、MAX485(UART轉485)等。
STM32串口通信參數配置
在進行STM32串口通信之前,需要對串口通信參數進行配置。這些參數包括波特率、數據位、停止位、校驗位等。其中,波特率表示每秒鐘傳輸的bit,在STM32F103系列中,最高可達4.5Mbps;數據位表示每個字符的數據長度(8位或者9位),停止位用于表示字符的結束(1bit或者2bit),校驗位用于檢查數據傳輸的正確性(無校驗、奇校驗或者偶校驗)。在STM32中,這些參數可以通過配置相應的寄存器來實現。例如,通過配置USART_BRR寄存器可以設置波特率,通過配置USART_CR1和USART_CR2寄存器可以設置數據位、停止位和校驗位等參數。
STM32串口通信編程實現
在進行STM32串口通信編程時,需要使用HAL庫或標準外設庫等提供的API函數來配置串口通信參數和發送/接收數據。以下是一個簡單的串口通信編程示例:
初始化串口通信參數:使用HAL庫或標準外設庫提供的函數配置串口通信參數,如波特率、數據位、停止位和校驗位等。
發送數據:使用HAL庫或標準外設庫提供的發送函數將數據寫入串口發送緩沖區,然后等待數據發送完成。在發送數據時,需要注意數據的長度和格式,以確保數據的正確傳輸。
接收數據:使用HAL庫或標準外設庫提供的接收函數從串口接收緩沖區讀取數據。在接收數據時,需要判斷接收緩沖區是否有數據可讀,并讀取相應的數據長度和格式。
錯誤處理:在串口通信過程中,可能會出現各種錯誤情況,如發送超時、接收溢出等。在編程時,需要添加相應的錯誤處理代碼,以處理這些異常情況。
STM32串口通信編程示例
以HAL庫,基于STM32CubeMX配置軟件,示例一個簡單的STM32串口例程。
1.創建CUBE工程:File->New Projiect
2.型號選擇
3.時鐘RCC配置和SYS配置
4.UART參數配置
5.時鐘樹配置
6.工程管理
7.程序修改
Main函數修改如下:
int main(void){
/* USER CODE BEGIN 1 */ uint8_t testbuf[] = {"stm32 uart\r\n"}; /* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */ SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */
/* USER CODE BEGIN 3 */ HAL_UART_Transmit(&huart1,testbuf,sizeof(testbuf),0xFFFF); HAL_Delay(1000); } /* USER CODE END 3 */}
編譯并下載至MCU,使用串口調試助手,即可看到MCU在輸出testbuf內的內容。
結論
STM32串口通信是嵌入式系統開發中不可或缺的一部分。通過掌握STM32串口通信的基礎知識和編程實現方法,可以更加高效地進行嵌入式系統開發。
-
STM32
+關注
關注
2258文章
10828瀏覽量
352520 -
uart
+關注
關注
22文章
1199瀏覽量
100835 -
串口通信
+關注
關注
34文章
1601瀏覽量
55239 -
并行通信
+關注
關注
1文章
31瀏覽量
10772
發布評論請先 登錄
相關推薦
評論