RM新时代网站-首页

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

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

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

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

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

串行通信與并行通信

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

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

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

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

STM32串口通信

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

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

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

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

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

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

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

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

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

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

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

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

STM32串口通信編程示例

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

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

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

2.型號(hào)選擇

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

3.時(shí)鐘RCC配置和SYS配置

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

4.UART參數(shù)配置

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

5.時(shí)鐘樹配置

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ǔ)知識(shí)和編程實(shí)現(xiàn)方法,可以更加高效地進(jìn)行嵌入式系統(tǒng)開發(fā)。

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

    關(guān)注

    2269

    文章

    10884

    瀏覽量

    355503
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1233

    瀏覽量

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

    關(guān)注

    34

    文章

    1623

    瀏覽量

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

    關(guān)注

    1

    文章

    31

    瀏覽量

    10820
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用stm32串口進(jìn)行通信?

    如何使用stm32串口進(jìn)行通信?基于寄存器與基于固件庫的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串口通信實(shí)戰(zhàn)

    STM32串口通訊一、基于寄存器與基于固件庫的編程方式的差異二、stm32串口通信實(shí)戰(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系列單片機(jī)時(shí)鐘樹的問題,串口通信遇到
    發(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ǔ)實(shí)驗(yàn)

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

    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串口通信實(shí)戰(zhàn)1、燒錄代
    發(fā)表于 12-07 09:51 ?13次下載
    初步了解<b class='flag-5'>STM32</b><b class='flag-5'>串口</b>通訊

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

    "2個(gè)STM32串口之間的串口通信(RX,TX)"
    發(fā)表于 12-09 17:21 ?83次下載
    "2個(gè)<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串口通信入門級(jí))

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

    STM32串口通信簡明知識(shí)

    STM32串口通信簡明知識(shí)
    的頭像 發(fā)表于 10-25 15:48 ?1308次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>簡明知識(shí)
    RM新时代网站-首页