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

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

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

串口通訊(Serial Communication) 簡介2

jf_78858299 ? 來源:匯極星科技 ? 作者:匯極星科技 ? 2023-04-23 11:29 ? 次閱讀

USART校驗控制

STM32F103 系列控制器 USART 支持奇偶校驗。當(dāng)使用校驗位時,串口傳輸?shù)拈L度將是 8 位的數(shù)據(jù)幀加上 1 位的校驗位總共 9 位,此時 USART_CR1 寄存器的 M 位需要設(shè)置為 1,即 9 數(shù)據(jù)位。

將 USART_CR1 寄存器的 PCE 位置 1 就可以啟動奇偶校驗控制,奇偶校驗由硬件自動完成啟動了奇偶校驗控制之后,在發(fā)送數(shù)據(jù)幀時會自動添加校驗位,接收數(shù)據(jù)時自動驗證校驗位。接收數(shù)據(jù)時如果出現(xiàn)奇偶校驗位驗證失敗,會見 USART_SR 寄存器的 PE 位置 1,并可以產(chǎn)生奇偶校驗中斷。

使能了奇偶校驗控制后,每個字符幀的格式將變成:起始位 + 數(shù)據(jù)幀 + 校驗位 + 停止位。

中斷控制

圖片

與USART配置有關(guān)的固件庫函數(shù)

USART 初始化結(jié)構(gòu)體

標準庫函數(shù)對每個外設(shè)都建立了一個初始化結(jié)構(gòu)體,比如 USART_InitTypeDef,結(jié)構(gòu)體成員用于 設(shè)置外設(shè)工作參數(shù),并由外設(shè)初始化配置函數(shù),比如 USART_Init() 調(diào)用,這些設(shè)定參數(shù)將會設(shè)置 外設(shè)相應(yīng)的寄存器,達到配置外設(shè)工作環(huán)境的目的。

初始化結(jié)構(gòu)體定義在 stm32f10x_usart.h 文件中,初始化庫函數(shù)定義在 stm32f10x_usart.c 文件中。

typedef struct 
{
    uint32_t USART_BaudRate; // 波特率
    uint16_t USART_WordLength; // 字長
    uint16_t USART_StopBits; // 停止位
    uint16_t USART_Parity; // 校驗位
    uint16_t USART_Mode; // USART 模式
    uint16_t USART_HardwareFlowControl; // 硬件流控制
} USART_InitTypeDef;
●USART_BaudRate:波特率設(shè)置。

    一般設(shè)置為 2400、9600、19200、115200。標準庫函數(shù)會根據(jù)設(shè)定值計算得到 USARTDIV 值,從而設(shè)置 USART_BRR 寄存器值。

 ●USART_WordLength:數(shù)據(jù)幀字長,可選 8 位或 9 位。

    它設(shè)定 USART_CR1 寄存器的 M 位的值。如果沒有使能奇偶校驗控制,一般使用 8 數(shù)據(jù)位;如果使能了奇偶校驗則一般設(shè)置為 9 數(shù)據(jù)位。
#define USART_WordLength_8b                  ((uint16_t)0x0000)
#define USART_WordLength_9b                  ((uint16_t)0x1000)


#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \\
                                      ((LENGTH) == USART_WordLength_9b))

● USART_StopBits:停止位設(shè)置。

停止位可選 0.5 個、1 個、1.5 個和 2 個停止位,它設(shè)定 USART_CR2寄存器的 STOP[1:0] 位的值,一般我們選擇 1 個停止位。
#define USART_StopBits_1                     ((uint16_t)0x0000)
#define USART_StopBits_0_5                   ((uint16_t)0x1000)
#define USART_StopBits_2                     ((uint16_t)0x2000)
#define USART_StopBits_1_5                   ((uint16_t)0x3000)
#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \\
                                     ((STOPBITS) == USART_StopBits_0_5) || \\
                                     ((STOPBITS) == USART_StopBits_2) || \\
                   ((STOPBITS) == USART_StopBits_1_5))

● USART_Parity:奇偶校驗控制選擇。

奇偶校驗位可選 USART_Parity_No(無校驗)、USART_Parity_Even(偶校驗) 以及 USART_Parity_Odd(奇校驗),它設(shè)定 USART_CR1 寄存器的 PCE 位和 PS 位的值。
#define USART_Parity_No                      ((uint16_t)0x0000)
#define USART_Parity_Even                    ((uint16_t)0x0400)
#define USART_Parity_Odd                     ((uint16_t)0x0600) 
#define IS_USART_PARITY(PARITY) (((PARITY) == USART_Parity_No) || \\
                                 ((PARITY) == USART_Parity_Even) || \\
                                 ((PARITY) == USART_Parity_Odd))

● USART_Mode:USART 模式選擇。

USART的模式有 USART_Mode_Rx 和 USART_Mode_Tx,允許使用邏輯或運算選擇兩個,它設(shè)定 USART_CR1 寄存器的 RE 位和 TE 位。
#define USART_Mode_Rx                        ((uint16_t)0x0004)
#define USART_Mode_Tx                        ((uint16_t)0x0008)
#define IS_USART_MODE(MODE) ((((MODE) & (uint16_t)0xFFF3) == 0x00) && ((MODE) != (uint16_t)0x00))

●USART_HardwareFlowControl:硬件流控制選擇。

#define USART_HardwareFlowControl_None       ((uint16_t)0x0000)
#define USART_HardwareFlowControl_RTS        ((uint16_t)0x0100)
#define USART_HardwareFlowControl_CTS        ((uint16_t)0x0200)
#define USART_HardwareFlowControl_RTS_CTS    ((uint16_t)0x0300)
#define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\\
                              (((CONTROL) == USART_HardwareFlowControl_None) || \\
                               ((CONTROL) == USART_HardwareFlowControl_RTS) || \\
                               ((CONTROL) == USART_HardwareFlowControl_CTS) || \\
                               ((CONTROL) == USART_HardwareFlowControl_RTS_CTS))

USART 時鐘初始化結(jié)構(gòu)體

typedef struct 
{
    uint16_t USART_Clock; // 時鐘使能控制
    uint16_t USART_CPOL; // 時鐘極性
    uint16_t USART_CPHA; // 時鐘相位
    uint16_t USART_LastBit; // 最尾位時鐘脈沖
} USART_ClockInitTypeDef;
USART_Clock:同步模式下 SCLK 引腳上時鐘輸出使能控制。

    可選禁止時鐘輸出 (USART_Clock_Disable) 或開啟時鐘輸出 (USART_Clock_Enable);如果使用同步模式發(fā)送,一般都需要開啟時鐘。它設(shè)定 USART_CR2 寄存器的 CLKEN 位的值。
#define USART_Clock_Disable                  ((uint16_t)0x0000)
#define USART_Clock_Enable                   ((uint16_t)0x0800)
#define IS_USART_CLOCK(CLOCK) (((CLOCK) == USART_Clock_Disable) || \\
                               ((CLOCK) == USART_Clock_Enable))

● USART_CPOL:同步模式下 SCLK 引腳上輸出時鐘極性設(shè)置。

可設(shè)置在空閑時 SCLK 引腳為低電平 (USART_CPOL_Low) 或高電平 (USART_CPOL_High)。它設(shè)定 USART_CR2 寄存器的 CPOL位的值。
#define USART_CPOL_Low                       ((uint16_t)0x0000)
#define USART_CPOL_High                      ((uint16_t)0x0400)
#define IS_USART_CPOL(CPOL) (((CPOL) == USART_CPOL_Low) || ((CPOL) == USART_CPOL_High))
USART_CPHA:同步模式下 SCLK 引腳上輸出時鐘相位設(shè)置。

    可設(shè)置在時鐘第一個變化沿捕獲數(shù)據(jù) (USART_CPHA_1Edge) 或在時鐘第二個變化沿捕獲數(shù)據(jù)。它設(shè)定 USART_CR2 寄存器的CPHA 位的值。USART_CPHAUSART_CPOL 配合使用可以獲得多種模式時鐘關(guān)系。
#define USART_CPHA_1Edge                     ((uint16_t)0x0000)
#define USART_CPHA_2Edge                     ((uint16_t)0x0200)
#define IS_USART_CPHA(CPHA) (((CPHA) == USART_CPHA_1Edge) || ((CPHA) == USART_CPHA_2Edge))

● USART_LastBit:選擇在發(fā)送最后一個數(shù)據(jù)位的時候時鐘脈沖是否在 SCLK 引腳輸出。

可以是不輸出脈沖 (USART_LastBit_Disable)、輸出脈沖 (USART_LastBit_Enable)。它設(shè)定USART_CR2 寄存器的 LBCL 位的值。
#define USART_LastBit_Disable                ((uint16_t)0x0000)
#define USART_LastBit_Enable                 ((uint16_t)0x0100)
#define IS_USART_LASTBIT(LASTBIT) (((LASTBIT) == USART_LastBit_Disable) || \\
                                   ((LASTBIT) == USART_LastBit_Enable))
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 物理層
    +關(guān)注

    關(guān)注

    1

    文章

    150

    瀏覽量

    34372
  • 串口通訊
    +關(guān)注

    關(guān)注

    1

    文章

    260

    瀏覽量

    24931
  • 串行通訊
    +關(guān)注

    關(guān)注

    2

    文章

    77

    瀏覽量

    16376
收藏 人收藏

    評論

    相關(guān)推薦

    瑞薩RZ/G2L串口SCI的使用(上)

    瑞薩RZ/G2L的串口簡稱SCI,全稱Serial Communication Interface。
    的頭像 發(fā)表于 01-17 12:19 ?1553次閱讀
    瑞薩RZ/G<b class='flag-5'>2</b>L<b class='flag-5'>串口</b>SCI的使用(上)

    串口通訊是什么

    串口通訊目錄物理層協(xié)議層USART簡介代碼講解串口通訊(Serial
    發(fā)表于 08-05 06:47

    串口通訊協(xié)議簡介

    1 串口通訊協(xié)議簡介串口通訊(Serial Communic
    發(fā)表于 08-12 06:30

    串口通訊簡介

    串口通訊簡介串口通訊(Serial Communicati
    發(fā)表于 11-30 06:56

    串口通訊基本知識簡介

    基本知識串口通訊 (Serial Communication)串口中斷其實也是依靠判斷寄存器的狀態(tài)進行中斷服務(wù)的通信的速率Bitrate—比
    發(fā)表于 12-08 08:30

    串口通信Serial簡介

    簡介按一次按鈕在串口監(jiān)視器輸出當(dāng)前狀態(tài)以及一共按下按鈕多少次我現(xiàn)在就缺一個 默認單刀雙擲按鈕。。按下是A狀態(tài),不安默認就是B狀態(tài)代碼void setup() {//開啟串口通信,波特率9600
    發(fā)表于 01-11 06:08

    串口通訊協(xié)議與RS-232標準簡介

    文章目錄一、串口通訊協(xié)議1.簡介2.物理層(1)RS-232 標準一、串口通訊協(xié)議1.
    發(fā)表于 02-15 06:03

    串口通訊串口通信協(xié)議簡介

    目錄一、串口二、STM32系統(tǒng)給上位機(win10)連續(xù)發(fā)送“hello windows!”1、接線:2、代碼實現(xiàn)3、燒錄4、串口調(diào)試一、串口串口
    發(fā)表于 02-15 07:21

    Serial Communication (COM) Dev

    the software to configure a ZigBee ZIC2410 for a Serial Communication application. In this application, when the device receives the da
    發(fā)表于 11-04 14:15 ?4次下載

    什么是串口通訊/同軸電纜

    什么是串口通訊/同軸電纜 串口通訊    Serial communic
    發(fā)表于 03-26 09:21 ?2861次閱讀

    Proteus在MCS&ARM中的應(yīng)用之Serial_Communication

    【好程序系列】Proteus在MCS&ARM中的應(yīng)用之Serial Communication
    發(fā)表于 01-20 15:03 ?4次下載

    STM32的串口通訊協(xié)議

    本文主要講解串口協(xié)議和RS-232標準,以及RS232電平與TTL電平的區(qū)別;介紹"USB/TTL轉(zhuǎn)232"模塊(以CH340芯片模塊為例)的工作原理。一、串口協(xié)議1.1 串口通信協(xié)議簡介
    發(fā)表于 12-24 18:37 ?8次下載
    STM32的<b class='flag-5'>串口</b><b class='flag-5'>通訊</b>協(xié)議

    串口通訊(Serial Communication) 簡介1

    串口通訊 (Serial Communication) 是一種設(shè)備間極為常用的串行通訊方式,目前多存在于工控機及部分通信設(shè)備中。
    的頭像 發(fā)表于 04-23 11:25 ?6874次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>通訊</b>(<b class='flag-5'>Serial</b> <b class='flag-5'>Communication</b>) <b class='flag-5'>簡介</b>1

    串口通訊(Serial Communication) 簡介3

    串口通訊 (Serial Communication) 是一種設(shè)備間極為常用的串行通訊方式,目前多存在于工控機及部分通信設(shè)備中。
    的頭像 發(fā)表于 04-23 11:30 ?2411次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>通訊</b>(<b class='flag-5'>Serial</b> <b class='flag-5'>Communication</b>) <b class='flag-5'>簡介</b>3

    串口通訊(Serial Communication) 簡介4

    串口通訊 (Serial Communication) 是一種設(shè)備間極為常用的串行通訊方式,目前多存在于工控機及部分通信設(shè)備中。
    的頭像 發(fā)表于 04-23 11:30 ?1074次閱讀
    <b class='flag-5'>串口</b><b class='flag-5'>通訊</b>(<b class='flag-5'>Serial</b> <b class='flag-5'>Communication</b>) <b class='flag-5'>簡介</b>4