日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F051——USART

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F051——USART 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????我在大二學32的時候曾經寫過一篇博客,現在看了一個韓老師的專題課后再來完善一下32串口方面的知識。所有的知識都可在官方手冊中找到,目前我認為學習一個新的芯片,最全最細的就是官方手冊了,英文看不懂可以看中文的,不過最好是英文的,翻譯有的地方有偏差。

---------------------------------------------------------------------------------------------------------------------------------

目錄

1 協議基礎知識介紹

1.1 同步通信和異步通信

同步通信:

異步通信:

1.2 串行通信和并行通信的區別

串行通信:

并行通信:

串行傳輸:

并行傳輸:

1.3 單工、半雙工、全雙工

1.4 常見通信總結

1.5 USART基本概念

1.6 串口電路連接

1.7 STM32f051串口?

1.8 串口通信協議介紹

1.9 波特率

2. USART寄存器介紹

2.1 控制寄存器 USART_CR

USART_CR1

USART_CR2

2.2 波特率寄存器 USART_BRR

2.3 中斷和狀態寄存器 USART_ISR

2.4 數據發送寄存器 USART_TDR

2.5 數據接收寄存器 USART_RDR?

3 USART開發傳輸控制流程

3.1 USART硬件原理圖分析

4 實踐:USART控制——字符傳輸讀 寫

4.1 CubeMX中配置管腳?

?4.2 串口數據的發送和接收

4.3?串口傳輸函數——讀取寄存器方式

?4.4 實踐:USART控制——字符傳輸利用庫

(1) 串口的發送函數

(2) 串口的接收函數

4.5 實踐6:USART控制——實現printf()串 口重定向輸出


1 協議基礎知識介紹

1.1 同步通信和異步通信

通信,最少要有兩個對象,一個收,一個發

同步通信:

????????一般情況下同步通信指的是通信雙方根據同 步信號進行通信的方式。比如通信雙方有一個共同的時 鐘信號,大家根據時鐘信號的變化進行通信。

?

異步通信:

????????是指數據傳輸速度匹配依賴于通信雙方有自 己獨立的系統時鐘,大家約定好通信的速度。異步通信 不需要同步信號,但是并不是說通信的過程不同步。數 據量大會有誤差。(兩邊都有自己獨立的時鐘信號)

注意:同步通信有時鐘線,異步通信沒有時鐘線。

1.2 串行通信和并行通信的區別

串行通信:

指的是同一時刻只能收或發一個bit位信息。 因此只用1根信號線即可。

并行通信:

指的是同一時刻可以收或發多個bit位的信 息,因此需要多根信號線才行。

串行傳輸:

數據按位順序傳輸。

-優點:占用引腳資源少

-缺點:速度相對較慢

例如:UART 串口

?

并行傳輸:

數據各個位同時傳輸。

-優點:速度快

-缺點:占用引腳資源多 IO口資源有限和使用緊張;

1.3 單工、半雙工、全雙工

單工:要么收,要么發,只能做接收設備或者發送設 備。比如收音機

半雙工:可以收,可以發,但是不能同時收發, 比如對 講機

全雙工:可以在同一時刻既接收,又發送。 比如手機

?

1.4 常見通信總結

1.5 USART基本概念

????????通用同步異步收發器(USART)靈活地與外部設備進行 全雙工數據通信,滿足外部設備對工業標準NRZ異步串 行數據格式的要求。USART通過小數波特率發生器提供 了多種波特率。它支持同步單向通信和半雙工單線通 信;還支持LIN(局域互聯網絡),智能卡協議與IrDA (紅外數據協會)SIR ENDEC規范,以及調制解調操作 (CTS/RTS)。而且,它還支持多處理器通信。

???????? USART**支持同步模式因此USART 需要同步始終信 號USART_CK(如STM32 單片機),通常情況同步信號 很少使用,因此USART和一般單片機UART使用方式是 一樣的,都使用異步模式。**

1.6 串口電路連接

接口與外部設備通過三個引腳相連, RX,TX,GND

任何 USART 雙向通訊要求最少有兩個引腳: 接收數據 輸入(RX)和發送數據輸出(TX)

RX: 接收數據輸入是串行數據的輸入口。 使用過采樣技 術來完成數據恢復,以區別輸入數據和噪聲。

TX: 數據發送輸出。 當發送器被禁止,輸出腳回到其 I/O 口配置狀態。 當發送器被使能,但不發送數據時,TX 腳 為高電平輸出。 在單線和智能卡模式中,這個口線既用 于發送數據也 用于接收數據。

注意:

(1)電腦用的TTL電平和EIA電平不能直接連;

(2)TTL電平, 0V表示0 ,大于3.3或者5伏就表示為1了;

????????DB9插槽已經很少了,或者迷你USB口插槽,因此有的 是USB線,這時需要當做串口用的話需要用驅動轉換, CH340。

1.7 STM32f051串口?

?

STM32F051內置多達兩個通用同步 / 異步收發器( USART1 和 USART2 ),通信速度可達 6 Mbit / s

如果使用 USART1進行串口傳輸通訊。 查找原理圖和手冊,對應寄存器是PA9,PA10。

1.8 串口通信協議介紹

協議很重要!!!?

?從左到右,看圖上發生的事件,實際發送從起始位開 始,停止位結束。

1. 約定數據什么時候發送,不傳輸數據的時候默認都是高 電平;

2. 起始位:開始發送的時候,發送一個低電平,作為起始 位;

3. 數據位:約定數據位8~9位(正常的通訊協議是5~8位, 但是STM32F0要求是8~9);數據的低位先發送;

4. 校驗位:數據發送完成,發送一個可選的校驗位,檢驗 數據的正確性; (奇校驗,奇校驗位設置1bit值為1,發送的數據里為1的 bit位的個數加上奇校驗位的發送的奇校驗標志1,一共是奇 數個1,就是正確發送。偶校驗同理),一般傳輸量不大, 不會產生誤差,所以一般不校驗;

5. 停止位:1到2個bit數據,一般是設置為0;

6. 約定數據傳輸的速率,一般是用到是9600,115200(不 是純數據位,包含了起始位等);

例如: 0 1 0 1 0 0 0 0 0 0 **TXD 串口輸出0x05波形圖、 注意是低位先發送**

1.9 波特率

????????在串行通信中,用“波特率”來描述數據的傳輸速率。所謂 波特率,既每秒傳送的二進制位數,其單位為bps(bits per second)。它是衡量串行數據速度快慢的重要指 標。

????????國際上規定一個標準的波特率系列: 110、300、600、 1200、1800、2400、4800、9600、115200、 14.4Kbps、19.2Kbps、……

例如:115200bps、指每秒傳送115200位。通信雙方必 須設置同樣的同學速率才能正常通信

注意:實際的數據沒這么多,還包括起始位,結束位, 校驗位

2. USART寄存器介紹

2.1 控制寄存器 USART_CR

USART_CR1

?32位,其中[31:26]無效,

????????以上描述,表明控制寄存器可以配置中斷使能、通訊協 議控制位,我們的開發只需要其中的一部分,也夠用 了,其他具體的配置需求可以參看手冊的24章。

注意:串口通訊協議的 配置,通常是8N1 配置:

8個通訊數據位, N沒有奇偶校驗,1個停止位;

USART_CR2配置停止位。

USART_CR2

?

?串口通訊協議的 8N1 配置 8個通訊數據位, N沒有奇偶校驗,1個停止位;

2.2 波特率寄存器 USART_BRR

????????記錄了 USART 的波特率。手動配置需要有公式去賦值, STM32CubeMX生成的工程會自動幫助配置,具體實現 代碼可以用來了解。?

2.3 中斷和狀態寄存器 USART_ISR

?????????用于判斷輸入、釋放數據的狀態: 控制寄存器中數據發送位(TXE)為1,表示TDR已經有數 據放到移位寄存器TX Shift Reg,等待移位寄存器輸出 (寫外設)完畢;(發送寄存器(TXE)為空時,注意 USART_TDR 寄存器此時是空的,即可以往 USART_TDR 寫入數據。此時寫入 USART_TDR 寄存器不會覆蓋先前 在 USART_TDR 中的數據,已經到移位寄存器啦。) 控制寄存器中數據接收位(RXNE)為1,表示RDR已經有 數據從移位寄存器RX Shift Reg中一位一位移動過來, 等待被輸入(芯片讀)完畢;所以置位ISR的數據接收位 (RXNE),就會設置將 RX Shift Reg 接收的數據移動到 USART_RDR 寄存器里,傳輸出錯,ORE被設置,具體 可以參考手冊了解。

2.4 數據發送寄存器 USART_TDR

?

2.5 數據接收寄存器 USART_RDR?

只讀,不可寫,保證讀到的是接收到的。

串口的發送和接收過程舉例:

上、中、下三部分:下是接收數據過程、中串口速度控 制(波特率)、上發送數據過程?

?

peripheral BUS:外設總線

Transmitter: 發送器

Receiver:? 接收器

Buffer:緩沖

Register:寄存器

FIFO:先入先出??一段空間大小的字符串傳輸,不是一個字節;

什么是FIFO?_大fu啊的博客-CSDN博客_fifo

Clock Source:時鐘源

shifter:位移寄存器

Holding Register:存儲寄存器

Control Unit:控制器

Non-FIFO 一個字節一個字節傳輸模式

Control unit 控制單元(檢查是否有數據、控制移位寄 存器)

TDR 發送數據寄存器:存儲數據,控制單元檢測有數據 要傳輸,放到傳輸控制寄存器,發送移位會一位一位的 發送出去。

RDR 接收數據寄存器:接收數據,控制單元檢測有數據 要讀取,接收位移會一位一位的讀取,放到接收控制寄 存器。

Buad-rate generator 波特率產生器(控制接收和發送 的速度)

ISR 狀態寄存器(發送數據狀態TEX,第7位;接收數據狀 態RXNE,第5位)

TDR 數據發送寄存器(發送的數據)

RDR 數據接收寄存器(讀到的數據)

3 USART開發傳輸控制流程

3.1 USART硬件原理圖分析

注意:如果無法識別串口,安裝好ch340串口驅動。我分享了一個鏈接

鏈接:https://pan.baidu.com/s/1os__C48tMrrgEjYI-e7fUw?pwd=82gt?
提取碼:82gt?

4 實踐:USART控制——字符傳輸讀 寫

4.1 CubeMX中配置管腳?

設置PA10和PA9分別收發管腳使用** ,且需要注意咱們 是用USART(同步異步串行接口)的異步功能,那么這里 要明確去設置為異步通訊!*

之后要注意配置通訊協議,默認是115200,8N1。

?

?4.2 串口數據的發送和接收

4.3?串口傳輸函數——讀取寄存器方式

在usart.c中編寫一下代碼?

(1) **串口發送一個字符:** void Uart_Putchar(uint8_t ch) { //等待TDR為空,表示可寫,ISR這時TXE是1 while(!(USART1->ISR &(1<<7))); USART1->TDR = ch;//發送字符 } (2) **串口接收一個字符:** uint8_t Uart_Getchar(void) { //等待RDR不為空,表示收到數據,ISR這時RXNE是1 while(!(USART1->ISR & (1<<5))); return USART1->RDR;//返回收到的字符 }

在usart.h中聲明函數?

/* USER CODE BEGIN Includes */ void Uart_Putchar(uint8_t ch); uint8_t Uart_Getchar(void); /* USER CODE END Includes */

?

Main.c中編寫測試代碼 char ch = 0; while (1) { ch = Uart_Getchar(); Uart_Putchar(ch); }

?

編譯后再下載到板子上。 板子接上串口線,和電腦連接,設備識別為如下端口:

?

如果你的串口線接線到電腦正確,但是沒有識別到端 口,可以嘗試安裝CH340驅動。?

識別成功后,打開串口助手,配置如下:

配置好后,點擊“打開”,在輸入框里輸入要發送的字符 串,點擊“發送”,可以看到接收框內收到對應得字符串。

?

拓展:實現字符串輸出函數 void Uart_Putstring(uint8_t *str) {while(*str != '\0'){Uart_Putchar(*str);str++;} }

?4.4 實踐:USART控制——字符傳輸利用庫

函數 HAL庫中串口的收發函數 在工程stm32f0xx_hal_uart.c文件中,定義了串口傳輸 庫函數。

(1) 串口的發送函數

HAL_UART_Transmit(UART_HandleTypeDef *huart,

uint8_t *pData, uint16_t Size, uint32_t Timeout);

?

(2) 串口的接收函數

HAL_UART_Receive(UART_HandleTypeDef *huart,

uint8_t *pData, uint16_t Size, uint32_t Timeout);

打印一行測試:

?

4.5 實踐6:USART控制——實現printf()串 口重定向輸出

????????printf函數的使用一般是在有屏幕的界面上實現代碼的輸 出調試功能,而我們的開發環境中一般是沒有屏幕的, 此時我們可以將輸出轉移到其他設備上。在串口開發 中,就經常利用此調試方法。需要注意的是printf函數的 傳輸調用的是c庫中的fputc函數。因此我們如果重新寫 了fputc函數,就可以改變printf函數的功能,可以向串 口打印輸出。?

int fputc(int ch,FILE *f) {while((USART1->ISR&(1<<7)) == 0);USART1->TDR=(uint8_t)ch;return ch; }

這里我之前專門寫過一篇介紹輸入輸出重定向的博文:

STM32——我對輸入輸出重定向的理解_宇努力學習的博客-CSDN博客_清除txe

總結

以上是生活随笔為你收集整理的STM32F051——USART的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。