在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

STM32基礎知識:串口通信-輪詢方式

CHANBAEK ? 來源:上下求索電子er ? 作者:上下求索電子er ? 2023-10-25 15:23 ? 次閱讀

串口通信-輪詢方式

1 串口通信概述

1.1 計算機通信的基本概念

計算機通信: 將計算機技術和通信技術相結合,完成計算機與外部設備或計算機與計算機之間的信息交換。按照數據傳輸方式的不同,可以分為串行通信和并行通信兩類。

圖片

串行通信: 數據逐位傳輸,傳輸線少,長距離傳輸時成本低,但數據的傳輸控制較復雜。按照實現數據同步的方式,可以分為同步串行和異步串行兩種。

  • 同步串行通信: 數據傳輸以數據塊(一組字符)為單位,在一個數據塊內,字符與字符間無間隔,收發雙方依靠獨立的時鐘線進行信號的同步。
    圖片
  • 異步串行通信: 數據傳輸以單個字符為單位,字符和字符之間的間隙任意,字符內部每一位持續的時間相同。收發雙方沒有專門的時鐘信號,而是依靠事先約定的字符格式和通信速率來完成通信適用于大批量的數據傳輸。
    圖片

并行通信: 多位數據同時傳輸,傳輸控制簡單,傳輸速度快,但是在長距離傳輸時硬件成本較高。

1.2 異步串行通信

異步通信的兩個關鍵點是字符格式波特率 ,字符格式決定了數據的傳輸形式,波特率決定了字符中每一位數據的持續時間。

字符格式

圖片

? 1 位起始位,規定為低電平;
? 5~8 位數據位,即要傳送的有效信息;
? 1 位奇偶校驗位;
? 1~2 位停止位,規定為高電平。

常用字符格式:1位起始位,8位數據位,無奇偶校驗,1位停止位

圖片

傳輸時低位在前,高位在后,上圖發送數據為0xE9。

通信速率

波特率:每秒鐘傳送二進制數碼的位數,以bit/s(bps)為單位。

常用的波特率有:9600、19200、38400、57600和115200;

波特率為115200,表示每秒傳輸115200位,且每一位數據在數據線上持續時間為Tbit= 1/115200 ≈ 8.68us

異步串行通信的數據接收過程

圖片

接收過程的本質是數據采樣,假設接收端的采樣時鐘是波特率的16倍。

① 接收過程由起始位的下降沿啟動;
② 接收端等待8個時鐘周期,以便建立一個接近比特周期中間的采樣點;
③ 接收端等待16個時鐘周期,使其進入第一個數據位周期的中點;
④ 第一個數據位被采樣并存儲在接收寄存器中;
⑤ 串口模塊在采樣第二個數據位之前等待另外16個時鐘周期;
⑥ 重復此過程,直到所有數據位都被采樣和存儲;
⑦ 由停止位的上升沿使數據線返回到空閑狀態。

串口通信的數據傳輸方向

圖片

錯誤校驗方式

  • 奇偶校驗:奇校驗表示數據中“1”的個數與校驗位“1”的個數之和為奇數;偶校驗表示數據中“1”的個數與校驗位“1”的個數之和為偶數。
  • 代碼和校驗:發送方將所發數據塊求和,產生一個字節的校驗字符附加到數據塊末尾。接收方采用同樣方式進行檢測
  • 循環冗余校驗:通過某種數學運算實現有效信息與校驗位之間的循環校驗,常用于磁盤信息的傳輸、存儲區的完整性校驗等。

2 STM32串口通信

2.1 串口收發單元

圖片

串口收發單元主要利用數據寄存器DR,發送引腳TX,接收引腳RX,以及三個通信狀態位TXE、TC和RXNE來完成數據的接收和發送。

  • TXE:發送數據寄存器空標志。當TDR寄存器的內容已經傳送到發送移位寄存器 時,該位由硬件置1。如果串口控制寄存器CR1中的TXEIE位為1,將會觸發發送數據寄存器空中斷。注意:當TXE置1時,數據有可能還在發送。
  • TC:發送完成標志。當發送移位寄存器的內容發送完成,同時TDR寄存器也為 空時,該位由硬件置1,表示本次數據傳輸已經完成。如果串口控制寄存器CR1中的TCIE位為1,將會觸發發送完成中斷。注意:當TC置1時,數據才是真正地發送完成。
  • RXNE:接收數據寄存器不為空標志。當移位寄存器的內容已經傳送到接收數據寄存器RDR時,該位由硬件置1。如果串口控制寄存器CR1中的RXNEIE位為1,將會觸發接收數據寄存器不為空中斷。

數據寄存器DR在硬件上分為TDR和RDR兩個寄存器,通過數據的流向進行區分,在結構設計上采用了雙緩沖結構;

發送時,數據通過數據總線送入TDR寄存器,然后傳送到發送移位寄存器完成數據轉換,從并行數據轉為串行數據,最后通過TX引腳發送;

接收時,數據通過RX引腳逐位送入接收移位寄存器,8位數據接收完成后,送入RDR寄存器,供用戶讀取。

USB轉TTL串口模塊

圖片

2.2 串口的數據類型定義

①外設句柄的定義:

HAL庫在結構上,對每個外設抽象成了一個稱為ppp_HandleTypeDef的結構體,其中ppp就是每個外設的名字。所有的函數都是工作在ppp_HandleTypeDef指針之下。

例如,使用USART2時,可以定義USART初始化結構體變量(全局變量)huart2

UART_HandleTypeDef huart2;

huart2就被稱為串口的句柄,它被貫穿整個USART收發的流程。

②外設句柄數據類型的組成:

圖片

圖片

③串口初始化數據類型:

圖片

成員變量WordLength的取值范圍

宏常量定義含義
UART_WORDLENGTH_8B數據位長度為8位
UART_WORDLENGTH_9B數據位長度為9位

成員變量StopBits的取值范圍

宏常量定義含義
UART_STOPBITS_1停止位長度為1位
UART_STOPBITS_2停止位長度為2位

成員變量Parity的取值范圍

宏常量定義含義
UART_PARITY_NONE無奇偶校驗
UART_PARITY_EVEN偶校驗
UART_PARITY_ODD奇校驗

成員變量Mode的取值范圍

宏常量定義含義
UART_MODE_RX串口僅處于接收模式,只能接收數據,不能發送數據
UART_MODE_TX串口僅處于發送模式,只能發送數據,不能接收數據
UART_MODE_TX_RX串口處于接收和發送模式,可以同時收發數據

成員變量HwFlowCtI的取值范圍

宏常量定義含義
UART_HWCONTROL_NONE無硬件流控
UART_HWCONTROL_RTS使能“請求發送(RTS)”引腳
UART_HWCONTROL_CTS使能“允許發送(CTS)”引腳
UART_HWCONTROL_RTS_CTS使能“請求發送(RTS)”和“允許發送(CTS)引腳

成員變量OverSampling的取值范圍

宏常量定義含義
UART_OVERSAMPLING_16采樣頻率是信號傳輸頻率的16倍
UART_OVERSAMPLING_8采樣頻率是信號傳輸頻率的8倍

2.3 外設初始化設計思想

圖片

①串口初始化過程:

圖片

抽象—串口初始化函數MX_USART2_UART_Init 將與MCU無關的通信參數存入句柄結構 + 使用HAL_UART_Init執行串口初始化操作,將句柄參數寫入寄存器。

HAL_UART_Init 干了哪些事?

  • 調用 HAL_UART_MspInit
  • 修改狀態忙
  • 配置寄存器
  • 清除標志位

圖片

承載—與MCU相關的初始化函數HAL_UART_MspInit :時鐘初始化 + 引腳初始化

圖片

3 串口通信方式

  • 輪詢方式:CPU不斷檢測串口的狀態標志來判斷數據收發的情況。特點:程序設計簡單,但CPU在檢測標志位期間,無法執行其他任務,CPU利用率較低。
  • 中斷方式:使能中斷后,接收一字節數據或發送一字節后申請中斷,在ISR中完成后續處理。在數據收發期間,CPU可以執行其他任務,CPU利用率較高。
  • DMA方式:初始化時設置相關參數,啟動DMA傳輸后,數據傳輸過程不需要CPU的干預。傳輸完成后,再產生DMA中斷,由CPU進行后續處理。傳輸效率最高。

4 輪詢方式的串口通信 ##

  1. 串口初始化函數:HAL_UART_Init

    函數原型HAL StatusTypeDef HAL_UART_Init (UART_HandleTypeDef *huart)
    功能描述按照串口句柄中指定的參數初始化串口
    入口參數huart:串口句柄的地址
    返回值HAL狀態值:HAL_OK表示初始化成功,HAL_ERROR表示初始化失敗
    注意事項1.該函數將調用與MCU相關的初始化函數HAL_UART_Msplnit完成時鐘、引腳和中斷等底層硬件的初始化操作2.該函數由CubeMX自動生成
  2. 接口函數:HAL_UART_Transmit

    函數原型HAL_StatusTypeDef HAL_UART_Transmit(UART_Handle TypeDef *huart, uint 8_t *pData, uint 16_t Size, uint 32_t Timeout)
    功能描述在輪詢方式下發送一定數量的數據
    入口參數1huart:串口句柄的地址
    入口參數pData:待發送數據的首地址
    入口參數3Size:待發送數據的個數
    入口參數4Timeout:超時等待時間, 以ms為單位, HAL MAX DELAY表示無限等待
    返回值HAL狀態值:HAL_OK表示發送成功;HAL_ERROR表示參數錯誤;HAL_BUSY表示串口被占用;HAL_TIMEOUT表示發送超時
    注意事項1.該函數連續發送數據,發送過程中通過判斷TXE標志來發送下一個數據,通過判斷TC標志來結束數據的發送2.如果在等待時間內沒有完成發送,則不再發送,返回超時標志3.該函數由用戶調用
  3. 接口函數:HAL_UART_Receive

    函數原型HAL_StatusTypeDef HAL_UART_Receive(UART_Handle TypeDef *huart, uint 8_t *pData, uint 16_t Size, uint 32_t Timeout)
    功能描述在輪詢方式下接收一定數量的數據
    入口參數1huart:串口句柄的地址
    入口參數pData:存放數據的首地址
    入口參數3Size:待接收數據的個數
    入口參數4Timeout:超時等待時間, 以ms為單位, HAL MAX DELAY表示無限等待
    返回值HAL狀態值:HAL_OK表示發送成功;HAL_ERROR表示參數錯誤;HAL_BUSY表示串口被占用;HAL_TIMEOUT表示發送超時
    注意事項1.該函數連續接收數據,接收過程中通過判斷RXNE標志來發送下一個數據2.如果在等待時間內沒有完成接收,則不再接收,返回超時標志3.該函數由用戶調用

5 任務實踐1

在PC上利用串口調試助手發送數據到MCU,MCU調用scanf函數讀取數據,然后調用printf函數發送應答信息到PC。

  1. 串口外設配置
    圖片

    • 異步模式,無硬件流控
    • 設置通信參數:波特率115200,8位數據位,無奇偶校驗,1位停止位,使能接收和發送,16倍過采樣(CubeMX默認配置)
  2. Keil中勾選Use MicroLIB
    圖片

  3. 編寫代碼
    printf和scanf重定向

    /* USER CODE BEGIN Includes */
    #include < stdio.h >
    /* USER CODE END Includes */
    
    int fputc (int ch, FILE *f)
    {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    int fgetc(FILE *f)
    {
        uint8_t ch = 0;
        HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    /* USER CODE END 4 */
    

    用戶應用代碼——猜數游戲

    /* USER CODE BEGIN 3 */
        printf("Please guess a number between 0 to 9n");
        if (scanf("%d", &guess_num) == 1)
        {
          if (guess_num == ans)
          {
            printf("You are right! It's %dn", ans);
          }
          else
          {
            printf("You are wrong! It is not %dn", guess_num);
          }
        }
      }
      /* USER CODE END 3 */
    

    實驗現象

    圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5355

    瀏覽量

    120531
  • 計算機
    +關注

    關注

    19

    文章

    7511

    瀏覽量

    88078
  • STM32
    +關注

    關注

    2270

    文章

    10904

    瀏覽量

    356367
  • 串口通信
    +關注

    關注

    34

    文章

    1626

    瀏覽量

    55562
  • 異步串行通信

    關注

    0

    文章

    16

    瀏覽量

    8438
收藏 人收藏

    評論

    相關推薦

    QT串口通信的簡單使用

    QT串口通信是上位機和下位機通信常用的通信方式, 也是學習QT必須學會的基礎知識, 這篇就簡單介
    的頭像 發表于 01-15 09:27 ?2050次閱讀
    QT<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的簡單使用

    CAN通信基礎知識

    記錄一下,方便以后翻閱~主要內容:1)CAN通信基礎知識;2)STM32 CAN控制器簡介;3)相關實驗代碼解讀。參考資料:《STM32中文參考手冊_V10》第22章——控制器局域網(
    發表于 08-19 08:24

    USART串口基礎知識

    第29章 STM32H7的USART串口基礎知識和HAL庫API本章節為大家講解USART(Universal synchronous asynchronous receiver transmitter,通用同步異步收發器)的
    發表于 08-20 08:05

    串口通信基礎知識點匯總,不看肯定后悔

    串口通信基礎知識點匯總,不看肯定后悔
    發表于 12-03 06:47

    STM32串口通信基礎知識點匯總,不看肯定后悔

    STM32串口通信基礎知識點匯總,不看肯定后悔
    發表于 12-03 08:03

    串口基礎知識點匯總

    串行口一串口基礎知識串口概念串行接口(Serial port)"同步/異步串行接收/發送器。"又稱“串口”USART,也稱串行通信接口(通常
    發表于 02-23 07:27

    通信基礎知識教程

    通信基礎知識 1、電信基礎知識2、通信電源技術3、配線設備結構、原理與防護4、防雷基礎知識5、EMC
    發表于 03-04 16:48 ?33次下載

    51單片機串口通信的一些基礎知識免費下載

    本文檔的主要內容詳細介紹的是51單片機串口通信的一些基礎知識免費下載。
    發表于 08-21 17:31 ?9次下載
    51單片機<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的一些<b class='flag-5'>基礎知識</b>免費下載

    STM32】基于cubemx+HAL庫的串口實驗(一)

    stm32串口實驗一、實驗前準備二、具體項目代碼項目1:printf重定向實驗,輪詢方式通信重定向:輪詢
    發表于 12-09 13:06 ?3次下載
    【<b class='flag-5'>STM32</b>】基于cubemx+HAL庫的<b class='flag-5'>串口</b>實驗(一)

    STM32實戰-串口通信方式匯總

    STM32實戰-串口通信方式匯總1.串口基本概念2.串口發送3.
    發表于 12-14 18:39 ?3次下載
    <b class='flag-5'>STM32</b>實戰-<b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>匯總

    串口通信基礎知識詳解

    目錄通信基礎知識STM32串口通信基礎(UART)串口通信
    發表于 12-20 19:20 ?14次下載
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>基礎知識</b>詳解

    STM32中的串口通信基礎知識

    目錄串口通信基本原理并行通信與串行通信串行通信中單工,半雙工和全雙工的區別按通信
    發表于 12-24 18:37 ?4次下載
    <b class='flag-5'>STM32</b>中的<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>基礎知識</b>

    STM32 HAL庫開發學習筆記: USART1串口通訊(中斷方式) IDE-STM32CubeIDE

    STM32串口通訊有三種方式,分別為阻塞(輪詢)、中斷、DMA。串口模式和配置 源代碼編寫
    發表于 12-24 18:52 ?19次下載
    <b class='flag-5'>STM32</b> HAL庫開發學習筆記: USART1<b class='flag-5'>串口</b>通訊(中斷<b class='flag-5'>方式</b>) IDE-<b class='flag-5'>STM32</b>CubeIDE

    第三節: 串口通信(用CubeMX學習STM32)

    用CubeMX學習STM32, 串口通信學習, 通過輪詢方式和中斷方式兩種
    發表于 12-27 18:46 ?8次下載
    第三節: <b class='flag-5'>串口</b><b class='flag-5'>通信</b>(用CubeMX學習<b class='flag-5'>STM32</b>)

    STM32串口通信簡明知識

    STM32串口通信簡明知識
    的頭像 發表于 10-25 15:48 ?1339次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>通信簡明知識</b>
    主站蜘蛛池模板: 69堂在线观看国产成人| 午夜片网站| 四虎在线观看免费永久| 中国成人免费视频| 高h细节肉爽文男男| 调教双性学霸美人| 亚洲精品一线二线三线| 四虎永久在线精品影院| 日本黄色www| 一级黄色日本| 亚洲成人精品在线| 三级特黄视频| 天天看天天摸天天操| 男女交性视频播放视频视频| 爱操综合| 免费看黄色的网站| 免费aa| 亚洲涩色| 高h视频网站| 欧美涩区| 久久国产免费观看精品| 亚洲精品第三页| 免费高清成人啪啪网站| 久插| 澳门久久| 亚洲乱码一二三四区| 亚洲综合色视频| 欧美色操| 美女黄页黄频| www.天天色| 喷潮白浆| 日韩毛片免费线上观看| 粉嫩尤物在线456| 亚洲欧美天堂网| 亚欧美色| 四虎影院最新网站| 免费一级欧美在线观看视频片| 广东毛片| 久草干| 久久久久激情免费观看| 色www视频永久免费软件|