[STM32] 4-2 USART與串口通信(2)

文章目錄

  • 前言
  • 4-2 USART與串口通信(2)
    • 數據發送過程
      • 雙緩沖與連續發送
      • 數據發送過程中的問題
    • 數據接收過程
      • TXE標志位(發送數據寄存器空)
      • TC標志位(發送完成標志位)
      • 單個數據的發送
      • 數據的連續發送
    • 接收過程中遇到的問題
      • 問題描述:
      • RXNE標志位
      • 接收單個數據
      • 接收多個數據
    • 錯誤標志位
    • 錯誤標志位的使用方法
    • 隨堂檢測
      • 說出USART這5個字母所代表的含義
      • 我們使用的這顆芯片有幾個USART接口
      • 簡述波特率寄存器BRR的計算方法
      • 簡述串并轉換電路的工作原理
      • TXE,TC,RXNE和ORE這4個標志位所代表的含義
      • 什么是噪聲錯
      • 請寫出連續發送多個數據的偽代碼
      • 請寫出連續發送多個數據的偽代碼

前言

  • 本筆記內容,為本人依據B站UP主“鐵頭山羊”視頻內容(本人為其粉絲),歸納整理總結而來,如有侵權,聯系立即刪除,同時有想詳細了解的也可進行觀看bilibili鐵頭山羊 。

  • 硬件:STM32F103C8T6

  • 軟件:Keil

4-2 USART與串口通信(2)

數據發送過程

雙緩沖與連續發送

在這里插入圖片描述

  • TDR(發送數據寄存器)

  • 移位寄存器

數據發送過程中的問題

  • 問題1:數據發送過快導致的覆蓋問題

  • 問題2:數據什么時候發送完成的問題

數據接收過程

TXE標志位(發送數據寄存器空)

  • 含義:Transmit Date Register Empty 發送數據寄存器空

  • 狀態

    • TXE == 0:TDR寄存器為有數據

    • TXE == 1:TDR寄存器為無數據,空

  • 示例代碼:

while(TXE == 0);	// 等待發送數據寄存器空
TDR = XXX;			// 將要發送的數據寫入到TDR

TC標志位(發送完成標志位)

  • **含義:**TC(Transmit Complete) 發送完成

  • **條件:**TDR空 && 移位寄存器空

  • 示例代碼:

while(TXE == 0);	// 等待發送數據寄存器空
TDR = XXX;			// 將要發送的數據寫入到TDR
while(TC == 0);		// 等待數據發送的完成

單個數據的發送

  • 示例代碼
// 1. 等待TDR清空
while(TXE == 0);// 2. 寫入要發送的數據
TDR = 0X5A;// 3. 等待數據發送完成
while(TC == 0);

數據的連續發送

  • 示例代碼:
for(i=0;i<n;i++)
{
// 1. 等待TDR清空
while(TXE == 0);
// 2. 寫入要發送的數據
TDR = 0X5A;
}// 3. 等待數據發送完成
while(TC == 0);

接收過程中遇到的問題

問題描述:

不知道什么時候去讀數據。

RXNE標志位

  • **含義:**RXNE(Receive date register Not Empty), 接收數據寄存器非空

  • 狀態:

    • RXNE == 0:無數據

    • RXNE == 1:有數據

接收單個數據

  • 示例代碼:
uint8_t a;
//1.等待RDR有數據需要讀取
while(RXNE == 0);//2.立即把數據讀取出來
a = RDR;

接收多個數據

  • 示例代碼:
uint_8 a[10];for(i=0;i<n;i++){// 1. 等待RDR有數據需要讀取while(RXNE == 0);// 2. 立即把數據讀取出來a[i] = RDR;
}

錯誤標志位

在這里插入圖片描述

標志位全稱含義置位條件
PEParity Error奇偶校驗錯校驗失敗時置 1
FEFrame Error幀格式錯誤幀格式錯誤時置 1
NENoise Error噪聲錯誤檢測到噪聲時置 1
OREOverrun Error過載錯誤數據未及時讀取時置 1

錯誤標志位的使用方法

uint8_t a;// 1. 等待RDR有數據需要讀取
while(RXNE == 0);// 2. 先備份SR寄存器
uint32_t srcpy = SR;// 3. 把數據讀取出來
a = USARTx -> RDR;// 4. 處理錯誤
if((srcpy & PE) !=0){}	// 校驗錯
if((srcpy & FE) !=0){}	// 幀格式錯誤
if((srcpy & NE) != 0){}	// 噪聲錯
if((srcpy & ORE) !=0){}	// 過載錯

隨堂檢測

說出USART這5個字母所代表的含義

答:
1.  Universal 		通用;
2.  Synchronous 	同步;
3.  Asynchronous	異步;
4.  Receive			接收器;
5.  Transmit		發送器。

我們使用的這顆芯片有幾個USART接口

答:
1.  3個;
2.  USART1;
3.  USART2;
4.  USART3。

簡述波特率寄存器BRR的計算方法

答:
1.  波特率 = 72000000/16/分頻值.
2.  分頻值1.  Mantissa整數部分:高12表示整數部分;2.  低4位表示小數部分.

簡述串并轉換電路的工作原理

在這里插入圖片描述

答:
1.  并轉串:移位寄存器并行傳輸數據 -> 接收數據寄存器 -> 數據寄存器從右往左1位1位的輸出;
2.  串轉并:數據從左到右進入發送數據寄存器 -> 進入完成 -> 并行進入移位寄存器.

TXE,TC,RXNE和ORE這4個標志位所代表的含義

答:
1.  TXE		發送數據寄存為空;
2.  TC		發送完成;
3.  RXNE	接收數據寄存器為空;
4.  ORE		過載錯誤。

什么是噪聲錯

我們在電平采樣時,通過高頻率的采樣,確定是高低電平,如果我們3次采樣都是低電平,則電平位低電平,反之,為高電平但是(以輸出高電平為例),如果兩次采樣是高電平,第3次為低電平,就會產生錯誤,這種錯誤被認為是噪聲錯

請寫出連續發送多個數據的偽代碼

uint8_t a[10];for(i=0;i<n;i++){// 1. 檢查TXE標志位,直到TXE=1為止while(TXE == 0);// 2. 發送數據TDR = a[i];
}// 3. TC == 1
while(TC == 0);

請寫出連續發送多個數據的偽代碼

uint8_t a[10];for(i=0;i<n;i++){// 1. 檢查TXE標志位,直到TXE=1為止while(TXE == 0);// 2. 發送數據TDR = a[i];
}// 3. TC == 1
while(TC == 0);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79095.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79095.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79095.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt多線程TCP服務器實現指南

在Qt中實現多線程TCP服務器可以通過為每個客戶端連接分配獨立的線程來處理&#xff0c;以提高并發性能。以下是一個分步實現的示例&#xff1a; 1. 自定義工作線程類&#xff08;處理客戶端通信&#xff09; // workerthread.h #include <QObject> #include <QTcpSo…

詳細介紹Python-pandas-DataFrame全部 *功能* 函數

Python-pandas-DataFrame全部 功能 函數 提示&#xff1a;幫幫志會陸續更新非常多的IT技術知識&#xff0c;希望分享的內容對您有用。本章分享的是pandas的使用語法。前后每一小節的內容是存在的有&#xff1a;學習and理解的關聯性。【幫幫志系列文章】&#xff1a;每個知識點…

香港科技大學廣州|可持續能源與環境學域博士招生宣講會—四川大學專場

香港科技大學廣州&#xff5c;可持續能源與環境學域博士招生宣講會—四川大學專場 時間&#xff1a;2025年5月8日&#xff08;星期四&#xff09;16:30開始 地點&#xff1a;四川大學基礎教學樓A座504 宣講嘉賓&#xff1a;肖殿勛 助理教授 一經錄取&#xff0c;享全額獎學金…

裝飾器設計模式(Decorator Pattern)詳解

裝飾器設計模式(Decorator Pattern)詳解 裝飾器模式是一種結構型設計模式,它允許動態地向對象添加額外行為,而無需修改其原始類。這種模式通過包裝對象的方式提供靈活的擴展功能替代繼承。 1. 核心概念 (1)模式定義 裝飾器模式:動態地給一個對象添加一些額外的職責,就…

【SpringMVC】詳解參數傳遞與實戰指南

目錄 1.前言 2.正文 2.1基礎參數傳遞 2.1.1單參數 2.1.2多參數 2.2對象參數綁定 2.2.1自動封裝對象 2.2.2參數別名處理 2.3集合類型處理 2.3.1數組接收 2.3.2List集合接收 2.4JSON參數處理 2.4.1介紹JSON 2.4.2傳遞JSON參數 2.5RESTful風格參數 2.6文件上傳處理…

mysql-窗口函數一

目錄 一、感受一下分組與窗口函數的區別 二、滑動窗口&#xff08;子窗口&#xff09;大小的確認 2.1 分組函數下order by使用 2.2 窗口子句 2.3 執行流程 三、函數使用 窗口函數需要mysql的版本大于等于8才行&#xff0c;可以先檢查一下自己的mysql版本是多少 select ve…

解決在Mac上無法使用“ll”命令

在 macOS 上&#xff0c;ll 命令是一個常見的別名&#xff0c;它通常是指向 ls -l 的。但是&#xff0c;如果你看到 zsh: command not found: ll&#xff0c;這意味著你當前的 zsh 配置中沒有設置 ll 作為別名。 解決方法&#xff1a; 1. 使用 ls -l 命令 如果只是想查看目錄…

GTA5(傳承/增強) 13980+真車 超跑 大型載具MOD整合包+最新GTA6大型地圖MOD 5月最新更新

1500超跑載具 1000普通超跑 1500真車超跑 各種軍載具1000 各種普通跑車 船舶 飛機 1000 人物1500 添加式led載具1000 超級英雄最新版 添加添加式武器MOD1000 添加地圖MOD500 添加超跑載具2000 當前共計1.2wMOD 4月2日更新 新增770menyoo地圖 當前共計12770 新增48款超級英雄最新…

初學Vue之記事本案例

初學Vue之記事本案例 案例功能需求相關Vue知識案例實現1.實現方法及代碼2.演示 案例收獲與總結 案例功能需求 基于Vue實現記事功能&#xff08;不通過原生JS實現&#xff09; 1.點擊保存按鈕將文本框的內容顯示在特定位置&#xff0c;且清空文本框內容 2.點擊清空按鈕&#x…

一個linux系統電腦,一個windows電腦,怎么實現某一個文件夾共享

下載Samba linux主機名字不能超過15個字符 sudo dnf install samba samba-client -y 創建共享文件夾 sudo mkdir /shared 配置文件 vim /etc/samba/smb.conf [shared] path /shared available yes valid users linux電腦用戶 read only no browsable yes p…

樹莓派5+edge-tts 語音合成并進行播放測試

簡介 Edge-TTS 是一個基于微軟 Edge 瀏覽器的開源文本轉語音(TTS)工具,主要用于將文本轉換為自然流暢的語音。它利用了微軟 Azure 的 TTS 技術,支持多種語言和聲音,同時具備高質量的語音合成能力。這里簡單演示在樹莓派中安裝該項目進行簡單測試。 開源倉庫地址:https:/…

多模態革命!拆解夸克AI相機技術架構:如何用視覺搜索重構信息交互?(附開源方案對比)

一、技術人必看&#xff1a;視覺搜索背后的多模態架構設計 夸克「拍照問夸克」功能絕非簡單的OCRQA拼接&#xff0c;而是一套多模態感知-推理-生成全鏈路系統&#xff0c;其技術棧值得開發者深挖&#xff1a; 視覺編碼器&#xff1a;基于Swin Transformer V2&#xff0c;支持4…

論文閱讀:2024 ICLR Workshop. A STRONGREJECT for Empty Jailbreaks

總目錄 大模型安全相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 A STRONGREJECT for Empty Jailbreaks 對空越獄的 StrongREJECT https://arxiv.org/pdf/2402.10260 https://github.com/dsbowen/strong_reject https://strong-reject.re…

AI生成Flutter UI代碼實踐(一)

之前的雜談中有提到目前的一些主流AI編程工具&#xff0c;比如Cursor&#xff0c;Copilot&#xff0c;Trea等。因為我是Android 開發&#xff0c;日常使用Android Studio&#xff0c;所以日常使用最多的還是Copilot&#xff0c;畢竟Github月月送我會員&#xff0c;白嫖還是挺香…

計網分層體系結構(包括OSI,IP,兩者對比和相關概念)

眾所周知&#xff0c;就像我們計算機領域中的任何東西一樣&#xff0c;計算機網絡也是個分層的體系結構&#xff0c;現代提出的結構就兩種——OSI和TCP/IP&#xff0c;我們先來剖析并對比一下這兩種模型&#xff0c;然后總結一下分層思想中的一些共性。 TCP/IP與OSI結構對比圖 …

面向對象的XML綜合練習

快遞包裹配送管理 需求描述 構建一個快遞包裹配送管理系統&#xff0c;完成以下操作&#xff1a; 記錄每個快遞包裹的信息&#xff0c;包括包裹編號、收件人姓名、收件地址和是否已配送。可以添加新的快遞包裹到系統中。標記某個包裹為已配送狀態。統計所有已配送和未配送的…

什么是鴻蒙南向開發?什么是北向開發?

文章目錄 鴻蒙南向開發 vs 北向開發&#xff1a;底層與生態的雙向賦能一、鴻蒙南向開發&#xff1a;連接硬件的底層基石二、鴻蒙北向開發&#xff1a;構建全場景應用生態三、南向與北向&#xff1a;互補與協同四、如何選擇開發方向?結語 鴻蒙南向開發 vs 北向開發&#xff1a;…

Linux常用命令27——userdel刪除用戶

在使用Linux或macOS日常開發中&#xff0c;熟悉一些基本的命令有助于提高工作效率&#xff0c;userdel命令來自英文詞組user delete的縮寫&#xff0c;其功能是刪除用戶信息。在Linux系統中&#xff0c;一切都是文件&#xff0c;用戶信息被保存到了/etc/passwd、/etc/shadow以及…

[藍橋杯 2021 省 AB] 砝碼稱重 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] w new int[n 1];int sum 0; // 所有砝碼重量之和for (int i 1; i < n; i) {w[i] sc.nextInt();sum w[i];}sc.close()…