單片機(STM32-串口通信)

一、串口通信基礎概念

串口通信(Serial Communication)是一種在計算機和外部設備之間進行數據傳輸的通信方式。它通過串行方式逐位傳輸數據,是最基本和常用的通信接口之一。

主要特點

1.?串行傳輸

(1)數據按位順序傳輸,一次只能傳輸一位

(2)相比并行通信,串口通信使用更少的線路

(3)傳輸距離可以更遠,抗干擾能力更強

2. 異步通信

(1)發送方和接收方使用獨立的時鐘

(2)通過起始位和停止位來同步數據

(3)不需要共享時鐘信號

二、通信基礎?

1.時鐘信號劃分

1.1通信方式

異步通信

無需時鐘信號,數據通過起始位和停止位同步。

同步通信

需要時鐘信號同步數據傳輸。

1.2傳輸方式

同步傳輸

(1)發送方和接收方使用相同的時鐘

(2)數據傳輸效率高需要時鐘同步機制

異步傳輸

(1)發送方和接收方使用獨立的時鐘

(2)通過起始位和停止位同步

(3)實現簡單,但效率較低

(4)但是并不是說通信的過程不同步(UART)

2.數據傳輸方式

2.1通信方式

串行通信

使用串行傳輸的方式傳輸數據

并行通信

使用并行傳輸的方式傳輸數據

2.2傳輸方式

串行傳輸

(1)數據按位順序傳輸

(2)只需要一條傳輸線

(3)傳輸距離遠,成本低

(4)速度相對較慢

并行傳輸

(1)多位數據同時傳輸

(2)需要多條傳輸線

(3)傳輸距離短,成本高

(4)速度相對較快

3.通信方向劃分

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

一根信號線只能單向發送或單向接收

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

一根信號線可以接收數據也可以發送數據,但是兩者不能同時進行

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

兩根信號線,一根發送數據,另一根接收數據,真正實現同時收發數據,速度快

4.常見通信總結

通信標準引腳說明通信方式通信方向
UART(通用異步收發器)TXD:?發送端<br>RXD: 接受端<br>GND: 公共地異步通信全雙工
單總線(1-wire)DQ:?發送/接受端異步通信半雙工
SPISCK: 同步時鐘<br>MISO: 主機輸入,從機輸出<br>MOSI: 主機輸出,從機輸入<br>SS: 片選同步通信全雙工
I2CSCL: 同步時鐘<br>SDA: 數據輸入/輸出端同步通信半雙工

?三、UART

1.通用同步/異步收發器

USART:通用同步/異步收發器是一種集成在微控制器或通信芯片中的硬件模塊,它幾支持同步通信,也支持異步 通信,但是在STM32中一般是同步

2.串口通信協議

2.1.概念

串口通信協議是一種數據逐位(bit)依次傳輸的通信方式,常用于點對點的短距離數據交換。

最常見的串口通信協議是RS-232、RS-485等。

2.2.基本特性

異步通信:無需專用時鐘線,數據幀通過起始位和停止位同步。

全雙工:可以同時進行收發(如UART)。

點對點:一般只連接兩個設備。

2.3.基本屬性

波特率:衡通信速度,表示美妙傳送點bit的個數

數據位:表示通信中實際數據位的個數,一般是5、7、8位

起始、停止位:數據包從起始位開始,到停止位結束。停止位置在的典型的值為1,1.5和2位。

2.4.奇偶校驗位:在串口通信中一種簡單的檢錯方式(在每個數據字節后面增加1位校驗位,用于檢測數據在傳輸過程中是否發生了單比特錯誤。)

3.USART結構圖

3.1.發送流程:

(1)CPU將數據寫入USART_TDR
(2)硬件自動將TDR數據復制到移位寄存器
(3)移位寄存器逐位將數據發送到TX引腳

3.2.接收流程:

(1)數據到達RX引腳
(2)移位寄存器逐位收集數據
(3)數據完整后硬件自動轉義至RDR

4.相關寄存器

4.1. 數據接收寄存器(Receive?Data?Register)

(1)作用:用于存放USART接收到的數據。

(2)工作原理:當USART模塊收到一個字節的數據后,會自動將其存入數據接收寄存器。CPU可以從該寄存器讀取數據。

(3)數據接收寄存器32位代表的含義:

4.2. 數據發送寄存器(Transmit Data?Register)

(1)作用:用于存放即將通過USART發送的數據。

(2)工作原理:CPU將要發送的數據寫入該寄存器,USART模塊會自動將其發送出去。如圖:

(3)數據發送寄存器32位代表的含義:

4.3. 中斷和狀態寄存器(Interrupt?and?Status?Register)

(1)作用:用于指示USART的各種狀態(如發送完成、接收完成、溢出、錯誤等),并控制中斷的使能與響應。

(2)中斷和狀態寄存器32位代表的含義:

(3)常見標志位:

TXE(Transmit Data Register Empty):發送寄存器空,可以寫新數據

RXNE(Read?Data Register?Not Empty):接收寄存器非空,有新數據可讀

TC(Transmission?Complete):發送完成

ORE(Overrun?Error):溢出錯誤

(4)例如第七位是寄存是發送寄存器是否為空的狀態:

4.4. 波特率寄存器(Baud Rate Register)

(1)作用:用于設置USART通信的波特率(即每秒傳輸的比特數)。

(2)波特率寄存器32位代表的含義:

4.5.總結

寄存器名稱作用常見寄存器名典型操作
數據接收寄存器存放接收到的數據RDR讀取數據
數據發送寄存器存放待發送的數據TDR寫入數據
中斷和狀態寄存器狀態指示和中斷控制ISR判斷狀態/響應中斷
波特率寄存器設置通信速率BRR設置波特率

五、實現串口通信

關鍵在于:通過寄存器實現輸出數據,每一個代碼

還有代碼必須寫在特定位置才行

1.一秒發送一字節數據

2.封裝進函數可以直接調用輸出

3.修改自寫函數實現通信功能

打開連接串口,燒錄程序后,復位后,串口就可以接收到數據。

六、ptintf重定向

int  printf(const char * format,...)

printf函數底層調用的是fputc函數,fputs是將要發送的數據寫入到標準輸出流stdout

int fputc(int /*c*/, FILE * /*stream*/) 

因此如果想讓printf將數據輸出到串口,需要重寫fputc

1.添加串口通信

2.設置代碼輸出名字和格式

3.勾選選項

4.為你的STM32工程啟用 MicroLIB 微型C庫

5.導入庫函數

6.重寫函數

七、scanf重定向

1.添加頭文件

2.重寫fgetc函數

八、HAL函數

1.串口發送函數

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)
功能:以阻塞模式通過串口發送數據
參數:UART_HandleTypeDef * huart 設備的句柄(用的是哪個串口)uint8_t * pData  要輸出的緩存區首地址 (要發的數據)uint16_t Size  發送的數據量	(發送多少個字節的數據)uint32_t Timeout  超時時間	(給他發送的最長時間)
返回值:發送狀態

2.串口接收函數

和重定向的scanf最大區別在于:這個函數不會阻塞進程,缺點就是有時候可能會取不到值。

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)功能:以阻塞模式通過串口接收數據參數:UART_HandleTypeDef * huart 設備的句柄uint8_t * pData 輸入緩存區首地址 uint16_t Size  接收的數據量uint32_t Timeout  超時時間(會等待這些時間來接收數據)返回值:接收狀態

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

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

相關文章

Redis學習其三(訂閱發布,主從復制,哨兵模式)

文章目錄9.Redis訂閱與發布9.1發布訂閱命令9.2示例10.Redis主從復制10.1概念10.2環境配置10.3集群搭建&#xff08;一主二從配置&#xff09;10.4使用規則&原理11.哨兵模式11.1基本概念11.2工作原理11.3使用案例12.緩存穿透,雪崩&#xff08;待拓展&#xff09;12.1緩存穿透…

跨平臺 App 如何無痛遷移到鴻蒙系統?全流程實戰+Demo 教程

摘要 目前&#xff0c;隨著 HarmonyOS&#xff08;鴻蒙系統&#xff09;的快速發展&#xff0c;越來越多開發者和企業希望將已有的 Android、Flutter、React Native 等跨平臺應用遷移到鴻蒙生態中。鴻蒙不僅具備分布式能力、原生性能和統一的開發范式&#xff0c;還提供了豐富的…

智慧后廚檢測算法構建智能廚房防護網

智慧后廚檢測&#xff1a;構建安全潔凈廚房的智能解決方案背景&#xff1a;傳統后廚管理的痛點與智慧化需求餐飲行業后廚管理長期面臨操作規范難落實、安全隱患難察覺、衛生狀況難追溯等痛點。傳統人工巡檢效率低、覆蓋面有限&#xff0c;難以實現24小時無死角監管。例如&#…

LatentSync: 一鍵自動生成對嘴型的視頻

LatentSync是什么 字節跳動與北京交通大學聯合推出了全新的唇形同步框架 LatentSync&#xff0c;它基于音頻驅動的潛在擴散模型&#xff0c;跳過了傳統的3D建模或2D特征點提取&#xff0c;直接生成自然逼真的說話視頻。 LatentSync借助Stable Diffusion強大的圖像生成能力&am…

在斷網情況下,網線直接連接 Windows 筆記本和 Ubuntu 服務器進行數據傳輸

在斷網情況下&#xff0c;通過網線直接連接 Windows 筆記本 和 Ubuntu 服務器上的容器 進行數據傳輸&#xff0c;可以按照以下步驟操作&#xff1a;1. 物理連接 使用網線直連&#xff1a;用一根 普通網線&#xff08;直通線&#xff09; 連接 Windows 筆記本和 Ubuntu 服務器的…

機器學習17-Mamba

深度學習之 Mamba 學習筆記 一、Mamba 的背景與意義 在深度學習領域&#xff0c;序列建模是一項核心任務&#xff0c;像自然語言處理、語音識別和視頻分析等領域&#xff0c;都要求模型能有效捕捉長序列里的依賴關系。之前&#xff0c;Transformer 憑借強大的注意力機制成為序列…

Java實現word、pdf轉html保留格式

一、word轉html 依賴&#xff1a; <properties><poi.version>5.2.3</poi.version><xhtml.version>2.0.4</xhtml.version> </properties><!--word轉html--> <dependency><groupId>org.apache.poi</groupId><a…

基于51單片機和16X16點陣屏、矩陣按鍵的小游戲《俄羅斯方塊》

目錄系列文章目錄前言一、效果展示二、原理分析三、各模塊代碼1、16X16點陣屏&#xff08;MAX7219驅動&#xff09;2、矩陣按鍵3、定時器0四、主函數總結系列文章目錄 前言 《俄羅斯方塊》&#xff0c;一款經典的、懷舊的小游戲&#xff0c;單片機入門必寫程序。 有兩個版本&…

Stable Diffusion Windows本地部署超詳細教程(手動+自動+整合包三種方式)

Stable Diffusion Windows 本地部署超詳細教程 (手動 自動 整合包三種方式) 一、引言 我們可以通過官方網站 Stability AI&#xff0c;以及 Dream Studio、Replicate、Playground AI 、Baseten 等網站在線體驗 Stable Diffusion 的巨大威力。相比于集成在網絡平臺的 SD 或者…

sqli-labs靶場通關筆記:第29-31關 HTTP參數污染

第29關 HTTP參數污染本關設置了web應用防火墻&#xff08;WAF&#xff09;&#xff0c;利用白名單保護機制來檢測和攔截惡意請求。看本關源代碼。<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); //disable er…

Vuex 基本概念

參照官網整理總結vuex語法。 計劃日期&#xff1a; Vuex基礎部分&#xff1a;2022年2月20日——2022年2月28日 Vuex源碼相關實踐&#xff1a;待定 Vuex拓展&#xff1a;待定 寫完后&#xff0c;會發到倉庫地址&#xff1a;待定 Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模…

深入理解Linux文件操作:stdin/stdout/stderr與C語言文件函數全解析

目錄 一、stdin、stdout 和 stderr 詳解 二、文件打開方式 三、C語言文件操作函數詳解 1、文件操作概述 2、文件操作函數分類表 1. 文件打開與關閉 2. 字符讀寫函數 3. 字符串讀寫函數 4. 格式化讀寫函數 5. 二進制讀寫函數 6. 文件定位函數 7. 文件狀態與錯誤檢測…

【自用】JavaSE--集合框架(一)--Collection集合體系

概述之前學的ArrayList就是集合的一種&#xff0c;是一種容器&#xff0c;可以往里面存東西&#xff0c;大小可變Collection集合體系Collection的常用方法以后Collection體系的集合都可以用下圖的方法注意toArray方法的數組類型是Object&#xff0c;這樣就可以接收任意類型的數…

電腦視頻常用幾種接口

傳輸信號類型 DP&#xff08;DisplayPort&#xff09;主要用于傳輸數字視頻和音頻信號&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同樣傳輸數字音視頻信號&#xff0c;但更偏向消費電子領域&#xff0c;如電視、游…

CherryStudio+playwright-mcp-server實現AI自動化

目錄 1、CherryStudio安裝與配置 1.1什么是CherryStudio 1.2安裝 1.3配置 2、playwright-mcp-server的安裝與配置 3、執行測試與結果 1、CherryStudio安裝與配置 1.1什么是CherryStudio Cherry Studio 是一款集多模型對話、知識庫管理、AI 繪畫、翻譯等功能于一體的全能 …

深入了解 find_element 方法:Web 自動化定位元素的核心?

在 Web 自動化測試領域&#xff0c;元素定位是實現各類操作的基礎&#xff0c;而find_element方法正是 Selenium 等自動化工具中用于定位單個元素的核心方法。掌握它的使用技巧&#xff0c;能讓我們更精準、高效地操控網頁元素&#xff0c;為自動化測試腳本的編寫打下堅實基礎。…

從零開始的云計算生活——第三十三天,關山阻隔,ELK日志分析

目錄 一.故事背景 二、Elasticsearch 全面概述 1、核心定位 2、核心特性 a. 分布式架構 b. 高性能原理 c. 數據模型創新 3、核心技術組件 4、核心應用場景 a. 企業級搜索 b. 可觀測性 c. 安全分析&#xff08;SIEM&#xff09; 5、版本演進關鍵特性 6、核心優勢…

深入理解 Spring Boot Starter 的生成機制

在使用 Spring Boot 進行開發時&#xff0c;我們常常會引入諸如 spring-boot-starter-web、spring-boot-starter-data-jpa 等依賴&#xff0c;從而快速開啟相關功能模塊。但你是否思考過這些 Starter 是如何構建的&#xff1f;如果我們要開發自己的 Starter&#xff0c;又該如何…

阿里云-通義靈碼:隱私保護機制—為數據安全筑起銅墻鐵壁

免責聲明&#xff1a;此篇文章所有內容皆是本人實驗&#xff0c;并非廣告推廣&#xff0c;并非抄襲&#xff0c;該系列繼續~每日一句不要感嘆自己的平凡&#xff0c;即便是最暗的星星&#xff0c;相與無邊的黑暗已是耀眼。一.引言在這個數據如同空氣般滲透到生活每個角落的時代…

最小生成樹算法詳解

最小生成樹算法詳解一、最小生成樹基礎概念1.1 生成樹與最小生成樹1.2 核心性質1.3 應用場景二、Prim 算法&#xff1a;從頂點出發的“生長式”構建2.1 算法原理2.2 Java 代碼實現&#xff08;鄰接矩陣版&#xff09;2.3 復雜度分析三、Kruskal 算法&#xff1a;按邊權排序的“…