0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32串口通信入門!附通信編程示例

億佰特物聯(lián)網(wǎng)應(yīng)用專家 ? 2024-07-05 08:21 ? 次閱讀

串行通信與并行通信

設(shè)備之間的通信方式可以分為串行通信和并行通信,這兩種通信方式各有優(yōu)缺點。串行通信是將數(shù)據(jù)按位順序傳輸,這樣做的優(yōu)勢是占用的引腳資源少,對于引腳資源緊張的MCU來大有益處,但是由于每次只能傳輸一個數(shù)據(jù),造成了傳輸速度較慢的劣勢(相對并行傳輸)。并行通信就是數(shù)據(jù)的各個位同時傳輸,優(yōu)點是數(shù)據(jù)傳輸快,缺點是占用引腳資源較多。

串行通信按照傳輸方向又分為單工、半雙工和全雙工。單工可以理解為只能向著一個方向傳輸數(shù)據(jù),半雙工就是可以雙向傳輸,但每次只能有一個傳輸方向,全雙工就是既可以雙向傳輸,它又可以同時有兩個傳輸方向。按照通信方式又可以分為同步通信和異步通信;同步通信需要時鐘線(用作時鐘信號的同步)的參與,例如SPI和IIC通信接口,而異步通信就是不帶時鐘線的,例如UART和one-wire。

7655f3ba-3a64-11ef-a655-92fbcf53809c.png

STM32提供了UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)和USART(Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步異步收發(fā)器)兩種串口通信接口,用于實現(xiàn)與其他設(shè)備之間的數(shù)據(jù)交換。本文將介紹STM32串口通信的基礎(chǔ)知識,幫助讀者理解和掌握其基本原理和配置方法。

STM32串口通信

STM32的串口通信模塊主要包括UART和USART兩種接口

UART是一種異步通信協(xié)議,它使用起始位、數(shù)據(jù)位、校驗位和停止位來定義一個字符的傳輸格式。USART則是一種同步/異步通信協(xié)議,它支持全雙工通信,并具備更高的數(shù)據(jù)傳輸速率和更好的抗干擾能力。

在常見的STM32F103C8T6中,根據(jù)芯片手冊可以得知該型號具備3個USART,但也可以作為UART使用。UART引腳TXD為數(shù)據(jù)輸出引腳,RXD為數(shù)據(jù)輸入引腳,兩個設(shè)備之間的UART連接為TXD和RXD交叉連接,也需要將GND連接在一起。在需要將UART設(shè)備連接其他通信接口設(shè)備連接時,則需要電平轉(zhuǎn)換芯片,例如CH340(USB轉(zhuǎn)TTL)、MAX485(UART轉(zhuǎn)485)等。

769e3fee-3a64-11ef-a655-92fbcf53809c.jpg

STM32串口通信參數(shù)配置

在進行STM32串口通信之前,需要對串口通信參數(shù)進行配置。這些參數(shù)包括波特率、數(shù)據(jù)位、停止位、校驗位等。其中,波特率表示每秒鐘傳輸?shù)腷it,在STM32F103系列中,最高可達4.5Mbps;數(shù)據(jù)位表示每個字符的數(shù)據(jù)長度(8位或者9位),停止位用于表示字符的結(jié)束(1bit或者2bit),校驗位用于檢查數(shù)據(jù)傳輸?shù)恼_性(無校驗、奇校驗或者偶校驗)。在STM32中,這些參數(shù)可以通過配置相應(yīng)的寄存器來實現(xiàn)。例如,通過配置USART_BRR寄存器可以設(shè)置波特率,通過配置USART_CR1和USART_CR2寄存器可以設(shè)置數(shù)據(jù)位、停止位和校驗位等參數(shù)。

STM32串口通信編程實現(xiàn)

在進行STM32串口通信編程時,需要使用HAL庫或標準外設(shè)庫等提供的API函數(shù)來配置串口通信參數(shù)和發(fā)送/接收數(shù)據(jù)。以下是一個簡單的串口通信編程示例:

初始化串口通信參數(shù):使用HAL庫或標準外設(shè)庫提供的函數(shù)配置串口通信參數(shù),如波特率、數(shù)據(jù)位、停止位和校驗位等。

發(fā)送數(shù)據(jù):使用HAL庫或標準外設(shè)庫提供的發(fā)送函數(shù)將數(shù)據(jù)寫入串口發(fā)送緩沖區(qū),然后等待數(shù)據(jù)發(fā)送完成。在發(fā)送數(shù)據(jù)時,需要注意數(shù)據(jù)的長度和格式,以確保數(shù)據(jù)的正確傳輸。

接收數(shù)據(jù):使用HAL庫或標準外設(shè)庫提供的接收函數(shù)從串口接收緩沖區(qū)讀取數(shù)據(jù)。在接收數(shù)據(jù)時,需要判斷接收緩沖區(qū)是否有數(shù)據(jù)可讀,并讀取相應(yīng)的數(shù)據(jù)長度和格式。

錯誤處理:在串口通信過程中,可能會出現(xiàn)各種錯誤情況,如發(fā)送超時、接收溢出等。在編程時,需要添加相應(yīng)的錯誤處理代碼,以處理這些異常情況。

STM32串口通信編程示例

以HAL庫,基于STM32CubeMX配置軟件,示例一個簡單的STM32串口例程。

1.創(chuàng)建CUBE工程:File->New Projiect

76b5797a-3a64-11ef-a655-92fbcf53809c.png

2.型號選擇

76dc9e4c-3a64-11ef-a655-92fbcf53809c.png

3.時鐘RCC配置和SYS配置

770abd36-3a64-11ef-a655-92fbcf53809c.png772b5ed8-3a64-11ef-a655-92fbcf53809c.png

4.UART參數(shù)配置

7742a502-3a64-11ef-a655-92fbcf53809c.png

5.時鐘樹配置

77680d9c-3a64-11ef-a655-92fbcf53809c.png

6.工程管理

778eedcc-3a64-11ef-a655-92fbcf53809c.png77aa3eb0-3a64-11ef-a655-92fbcf53809c.png

7.程序修改

Main函數(shù)修改如下:

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,使用串口調(diào)試助手,即可看到MCU在輸出testbuf內(nèi)的內(nèi)容。

結(jié)論

STM32串口通信是嵌入式系統(tǒng)開發(fā)中不可或缺的一部分。通過掌握STM32串口通信的基礎(chǔ)知識和編程實現(xiàn)方法,可以更加高效地進行嵌入式系統(tǒng)開發(fā)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2262

    文章

    10846

    瀏覽量

    353660
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1214

    瀏覽量

    100995
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1604

    瀏覽量

    55324
  • 并行通信
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    10796
收藏 人收藏

    評論

    相關(guān)推薦

    如何使用stm32串口進行通信?

    如何使用stm32串口進行通信?基于寄存器與基于固件庫的stm32編程方式有什么差異是什么?
    發(fā)表于 12-03 07:18

    STM32串口通信如何編程?

    STM32怎么使用串口?STM32串口通信如何編程?
    發(fā)表于 12-07 08:03

    STM32串口通信相關(guān)資料分享

    STM32串口通信文章目錄STM32串口通信前言一、基于寄存器與基于固件庫的
    發(fā)表于 02-10 06:28

    stm32串口通信實戰(zhàn)

    STM32串口通訊一、基于寄存器與基于固件庫的編程方式的差異二、stm32串口通信實戰(zhàn)1、燒錄代
    發(fā)表于 02-10 07:00

    stm32f407串口通信的代碼

    stm32f407串口通信的代碼 原理圖還有封裝 很清楚自己畫的
    發(fā)表于 03-21 17:22 ?0次下載

    STM32的三種串口通信協(xié)議介紹

    本文首先介紹了STM32串口硬件電路及串口編程,其次介紹了STM32的三種串口
    發(fā)表于 05-25 09:33 ?3.8w次閱讀
    <b class='flag-5'>STM32</b>的三種<b class='flag-5'>串口</b><b class='flag-5'>通信</b>協(xié)議介紹

    STM32串口通信數(shù)據(jù)亂碼的相關(guān)問題

    STM32串口通信以及溫度采集搞定,其中主要遇到STM32系列單片機時鐘樹的問題,串口通信遇到
    發(fā)表于 06-22 08:01 ?1.2w次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>數(shù)據(jù)亂碼的相關(guān)問題

    STM32串口通信

    STM32串口通信串口通信簡介編程代碼注意:本文參考STM3
    發(fā)表于 12-07 09:36 ?15次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    Stm32串口通信基礎(chǔ)實驗

    目錄二、stm32串口通信二級目錄三級目錄二、stm32串口通信1.本次實驗使用的是
    發(fā)表于 12-07 09:36 ?32次下載
    <b class='flag-5'>Stm32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>基礎(chǔ)實驗

    STM32串口通信與它的堆、棧、全局變量

    STM32串口通信文章目錄STM32串口通信前言一、基于寄存器與基于固件庫的
    發(fā)表于 12-07 09:51 ?12次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>與它的堆、棧、全局變量

    初步了解STM32串口通訊

    STM32串口通訊一、基于寄存器與基于固件庫的編程方式的差異二、stm32串口通信實戰(zhàn)1、燒錄代
    發(fā)表于 12-07 09:51 ?13次下載
    初步了解<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>通訊

    "2個STM32串口之間的串口通信(RX,TX)"

    "2個STM32串口之間的串口通信(RX,TX)"
    發(fā)表于 12-09 17:21 ?83次下載
    "2個<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>之間的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>(RX,TX)"

    STM32串口通信

    STM32串口通信串口通信簡介編程代碼注意:本文參考STM3
    發(fā)表于 01-14 13:47 ?12次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    MSP430串口通信入門級)

    MSP430串口通信入門級)
    發(fā)表于 03-14 15:44 ?19次下載

    STM32串口通信簡明知識

    STM32串口通信簡明知識
    的頭像 發(fā)表于 10-25 15:48 ?1216次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>簡明知識