精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

億佰特物聯網應用專家 ? 2024-07-05 08:21 ? 次閱讀

串行通信與并行通信

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

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

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

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)等。

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

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

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參數配置

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函數修改如下:

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
收藏 人收藏

    評論

    相關推薦

    如何使用stm32串口進行通信

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

    STM32串口通信如何編程

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

    STM32串口通信相關資料分享

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

    stm32串口通信實戰

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

    stm32f407串口通信的代碼

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

    STM32的三種串口通信協議介紹

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

    STM32串口通信數據亂碼的相關問題

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

    STM32串口通信

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

    Stm32串口通信基礎實驗

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

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

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

    初步了解STM32串口通訊

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

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

    "2個STM32串口之間的串口通信(RX,TX)"
    發表于 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
    發表于 01-14 13:47 ?11次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    MSP430串口通信入門級)

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

    STM32串口通信簡明知識

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