day9 串口通信

1串口通信

串口通信是嵌入式系統和電子設備中最常用的?異步串行通信?方式,核心是通過?TX(發送)?和?R(接收)?兩根線實現全雙工數據傳輸。

2通信協議分類

2.1同步/異步通信

同步和異步是串行通信中兩種根本不同的數據傳輸方式,核心區別在于 是否需要共享時鐘信號 來協調數據傳輸。

2.1.1同步通信

同步通信:帶時鐘同步信號,如IIC接口或者SPI接口都屬于同步通信,要求通信雙方必須使用同一個時鐘,相當于發送數據的同時接收數據,同步通信屬于連續串行傳輸數據,一次只傳輸一幀數據,相比于異步通信而言,傳輸效率更高,缺點是時鐘必須一致

2.1.2異步通信

異步通信:不帶時鐘同步信號,如UART接口屬于異步通信,要求通信雙方具有發送端和接收端,由于不要求時鐘同步,所以在通信的時候,通信雙方必須提前約定好通信格式(字符格式)以及通信速率,異步通信以字符為單位進行傳輸,在傳輸一個字符的時候會添加起始位和停止位,通過起始位以及停止位來達到同步的功能。

2.1.3關鍵對比

對比項同步通信異步通信
時鐘信號必需(SCL、SCLK)無需
數據幀格式無起始/停止位,連續傳輸每幀含起始/停止位
速度高(SPI可達100Mbps)低(通常<1Mbps)
距離短(通常<1m)長(RS485可達1200m)
復雜度高(需時鐘同步)低(僅需波特率一致)
典型協議SPI、I2CUART、RS232、RS485

2.2串行/并行通信

2.2.1串行通信

傳輸原理:數據按位依次順序傳輸,如發送字節0x41(ASCII 'A')的二進制01000001,從LSB或MSB開始逐個傳輸。

優點:節約引腳資源(最少一根線)、傳輸成本低、傳輸距離遠

缺點:傳輸速度慢

應用領域:一般用于工控設備、測量設備、少部分通信設備? USB? COM口

2.2.2并行通信

傳輸原理:多位數據同時通過多根數據線發送。例如,8位數據0x41通過8根線同時傳輸,每根線對應1位。

優點:傳輸速度快

缺點:占用引腳資源、傳輸成本高、傳輸距離近、抗干擾能力弱(串擾)

應用領域:一般大量數據傳輸,并且傳輸距離較近 ?如計算機總線

2.3單工/半雙工/全雙工通信

2.3.1單工/半雙工/全雙工概念對比

模式數據傳輸方向典型協議/硬件優缺點
單工單向固定(A→B)廣播、遙控器、FM收音機簡單;無法反向傳輸
半雙工雙向交替(A→B或B→A,不同時)RS485、對講機、I2C節省線路;需切換方向,效率較低
全雙工雙向同時(A→B和B→A可同時進行)UART、SPI、電話、USB高效;需獨立通道,成本略高

2.3.2單工/半雙工/全雙工對比

維度單工半雙工全雙工
效率最低中等(需切換方向)最高(雙向同時)
成本最低(單線)中等(共享線路)較高(獨立通道)
典型場景廣播、遙控工業總線、對講機電話、USB、高速數據傳輸
協議舉例FM廣播RS485、I2CUART、SPI、以太網

3通信接口

? ? ? ? ?通信雙方可以實現按照某一種協議進行通信的前提是:首先雙方都有一個相同的通信接口。該接口還要可以按照通信協議進行數據的收發。

口協議只規定了按照怎樣的順序傳輸,但是數字量如何轉換,

按照什么電平標準到另一個器件,這個不是協議所規定的

RS232,RS485電平是串口通信過程中的一種電平標準,不是協議

例如:

硬件設備和計算機在通信的時候,需要用到電氣轉換芯片(如MAX232),因為硬件平臺一般采用TTL電平信號(采用正邏輯電平,+5V等價于邏輯1,0V等價于邏輯0),但是計算機采用RS232電平信號(采用負邏輯電平,-15V~-3V 表示邏輯1,+3V~+15V 表示邏輯0)。

????????通信時一般數據都是以二進制進行收發,那么電壓信號在什么情況下為邏輯“1”,在什么情況下為邏輯“0”,這時就需要按照相同的電平規范來接收。

TTL電平規范

COMS

RS485電平規范

4串口通信的參數

????????USART或者UART都是全雙工異步通信,由于不需要時鐘同步,所以就必須要求通信雙方要約定字符格式和通信速率。

4.1字符格式

????????字符格式一般都是采用字符幀的形式進行傳輸,字符幀由起始位、數據位、校驗位、停止位組成。具體的說明可以參考STM32中文參考手冊的26.3.1章節。

UART通信的數據幀格式:1位起始位(‘0’),5~8位數據位,1位校驗位,0.5、1、1.5、2位停止位

起始位:告知接收方數據開始發送。

數據位:保存傳輸的數據

校驗位:分為奇校驗、偶校驗和無校驗,若選擇奇校驗,則數據位和校驗位上1的總個數為奇數,若選擇偶校驗,1的個數為偶數。

(1) 起始位:指的是一幀數據的開始 ? 規定為1bit的低電平

(2) 數據位:指的是有效的信息,可以為7bit(標準ASCII碼)或者8bit(拓展ASCII碼)

(3) 校驗位:指的是對于數據位的簡單校驗,可以確保數據正常發送,也可以避免噪聲的影響,校驗分為奇校驗、偶校驗,校驗位也只占1bit。一般不使用校驗位。

(4) 停止位:指的是一幀數據傳輸完成 ? 停止位一般選擇1bit,規定為高電平

4.2通信速率

通信速率指的是單位時間內傳輸的有效的二進制數的個數,也被稱為波特率,單位為bps。常用的波特率有9600bps115200bps。 可以根據實際需求進行修改。

舉個例子:一般采用的波特率是9600bps,字符格式選擇8bit數據位、無校驗、1bit停止位,然后再加上1bit的起始位,所以一幀字符占10bit,所以單位時間可以傳輸960幀。

5代碼配置

5.1配置步驟

stm32f4xx_tim.c函數中可以查看

===============================================================================
##### How to use this driver #####
===============================================================================
[..]
(#) Enable peripheral clock using the following functions
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6?
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3,?UART4 or UART5.

? ?1.使能USART

(#) According to the USART mode, enable the GPIO clocks using?
? RCC_AHB1PeriphClockCmd() function. (The I/O can be TX, RX, CTS,?
or/and SCLK).?

2.使能GPIO

(#) Peripheral's alternate function:?
(++) Connect the pin to the desired peripherals' Alternate?
Function (AF) using GPIO_PinAFConfig() function

3.使用GPIO_PinAFConfig()將引腳復用
(++) Configure the desired pin in alternate function by:

4通過以下方式將引腳配置為復用功能
GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF

? ? ? ? (++) Select the type, pull-up/pull-down and output speed via?
GPIO_PuPd, GPIO_OType and GPIO_Speed members
(++) Call GPIO_Init() function

(#) Program the Baud Rate, Word Length , Stop Bit, Parity, Hardware?
flow control and Mode(Receiver/Transmitter) using the USART_Init()
function.

5對串口參數進行配置USART_Init()

(#) For synchronous mode, enable the clock and program the polarity,
phase and last bit using the USART_ClockInit() function.
對于同步模式,這個不用


? ? ? (#) Enable the NVIC and the corresponding interrupt using the function?
USART_ITConfig() if you need to use interrupt mode.?

6打開串口中斷,配置NVIC

(#) When using the DMA mode?
(++) Configure the DMA using DMA_Init() function
(++) Active the needed channel Request using USART_DMACmd() function
DMA的,這個不用? ?


? ? ? (#) Enable the USART using the USART_Cmd() function.

7打開串口USART_Cmd()

8編寫中斷服務函數

(#) Enable the DMA using the DMA_Cmd() function, when using DMA mode.?

-@- Refer to Multi-Processor, LIN, half-duplex, Smartcard, IrDA sub-sections
for more details

5.2代碼整體

實現電腦對單片機數據發送,并顯示。使用單片機USART1串口中斷方式

mian.c函數

usart.c

5.3出現問題

數據接收區一直是問號

通過打開示例工程,將代碼復制進去可以用,知道配置沒有錯,最后找到問題出在HSE時鐘上,單片機實際使用時鐘為8MHZ,但是stm32f4xx.h文件中是25MHZ時鐘需要修改。

5.4代碼解析

? 5.4.1結構體USART_InitTypeDef USART_InitStructure;變量配置

  1. USART_BaudRate???????????? 指的是波特率?? ?????????? 常用9600bps? 115200bps
  2. USART_WordLength??????? 指的是數據位??????? ?? 常用8bit?? 低位先出

  1. USART_StopBits?????????????? 指的是停止位??????? 常用1bit

  1. USART_Parity?????????? 指的是校驗位??????? 常用無校驗

  1. USART_Mode????????? 指的是串口模式 常用收發模式? USART_Mode_Rx | USART_Mode_Tx

  1. USART_HardwareFlowControl??????? 指的是硬件流控制?? 常用無

5.4.2指定USART中斷源,收到數據就發生中斷

編寫中斷服務函數,一般需要提前設置好串口中斷的觸發條件,一般觸發條件都會設置為接收到數據就發生中斷。

ST公司提供了一個函數可以設置串口中斷源,調用USART_ITConfig()函數

一般在中斷服務函數中需要檢測中斷是否發生(檢測中斷狀態)以及清除中斷狀態即可。

5.4.3中斷服務函數

發送數據

接收數據(需要在中斷服務函數中調用該函數來接收數據)

讀取狀態

狀態寄存器

?USART_GetFlagStatus(USART1,USART_FLAG_TXE) ;//檢測發送寄存器發完,為空

USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中斷標志

6藍牙模塊使用

6.1引腳連接

VCC---5V

Trig---觸發信號輸入(模塊輸入單片機發來的信號)----隨便找個引腳配置輸出模式

Echo---回想信號輸出(模塊輸出單片機輸入)---隨便找個引腳配置輸入模式

GND---GND

6.2超聲波原理

Trig連接的單片機引腳配置輸出模式,輸出一個至少10us的觸發信號;第二部模塊來做,完成后通過IO口輸出一個高電平信號給單片機;高電平信號由與測試距離成正比,通過定時器記錄輸入高電平持續時間,根據公式得出距離。

為了超聲波測距更加準確可以采用溫度補償

6.3超聲波距離計算

通過檢測到的高電平持續的時間,計算實際距離

已知測距精度是3mm,聲速按照340米每秒算

得到3mm,用時9us,只需在每9us計數一次,知道有多少個9us,便知有多少個3mm。得到的往返距離再除以2,得到實際距離。

6.4代碼展示

main.c

.main.h

gpio.c

gpio.h

6.5遇到問題

說實話并沒有實現,將代碼復制到示例工程中實現了。但是我工程沒實現,沒有串口發送數據。

且stm32f4xx.h和system_stm32f4xx.c,中時鐘和鎖相環都改過了。

明天可能繼續往下寫,可能繼續找該問題解決方式

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

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

相關文章

面向對象的設計模式

一、設計模式簡介1、什么是設計模式針對反復出現的問題所總結歸納出的通用解決方設計模式是指在軟件開發過程中案。這些方案是眾多軟件開發人員經過大量實踐總結出來的&#xff0c;具有高效性、可維護性和可擴展性等優點。使用設計模式可以幫助開發者更高效地構建軟件系統&…

每日釘釘API探索:chooseDepartments專注于部門維度的選擇接口

在企業級應用開發過程中&#xff0c;針對組織架構中的部門進行操作是非常常見的需求。今天我們要介紹的是釘釘的chooseDepartments API&#xff0c;它允許用戶以部門為單位進行選擇&#xff0c;并返回所選部門的相關信息。&#x1f4cc; 功能概述chooseDepartments API主要用于…

生產環境CI/CD流水線構建與優化實踐指南

生產環境CI/CD流水線構建與優化實踐指南 目錄 業務場景描述技術選型過程實現方案詳解 流水線結構設計并行構建與緩存策略部署策略&#xff1a;滾動、藍綠、金絲雀回滾與告警自動化 踩過的坑與解決方案總結與最佳實踐 業務場景描述 某大型電商平臺&#xff0c;為了保證代碼持續交…

騰訊云和火山云優劣勢對比

從問題本身看&#xff0c;用戶沒有限定具體場景&#xff0c;說明可能需要一個全面的橫向對比。不過云計算服務涉及面太廣&#xff0c;我最好先搭建一個框架性的分析結構&#xff0c;再填充具體細節。 首先想到從幾個核心維度切入&#xff1a;基礎能力&#xff08;計算存儲網絡&…

Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能實戰指南

Augment AI 0.502.0版本深度解析&#xff1a;Task、Guidelines、Memory三大核心功能實戰指南 augment最新版輔助功能全解析續杯免費額度再用滿教程|memory|userguidlines|tasksaugment最新插件功能教程前言 在AI輔助編程領域&#xff0c;Augment AI作為一款強大的VS Code插件&…

docker搭建、小皮面板搭建、bp使用、msf

docker搭建Vulhub靶場 docker安裝 apt-get install docker.io docker-compose#設置docker代理&#xff1a;創建文件夾以及對應的文件 mkdir /etc/systemd/system/docker.service.d#在該文件中配置自己的代理ip以及代理端口 vim /etc/systemd/system/docker.service.d/http-p…

AI優化器美國VPS集成:智能算力部署與性能調優指南

在當今數字化浪潮中&#xff0c;AI優化器與高性能VPS的融合正成為企業技術架構的核心競爭力。本文將深入解析美國VPS服務器如何通過AI驅動的智能優化技術實現算力突破&#xff0c;從資源配置算法到實時流量調度&#xff0c;全面揭示這種創新組合在跨境電商、大數據分析等場景中…

【保姆級圖文詳解】Spring AI 中的工具調用原理解析,工具開發:文件操作、聯網搜索、網頁抓取、資源下載、PDF生成、工具集中注冊

目錄前言一、Spring AI 中的工具調用&#xff08;Tool Calling&#xff09;1.1、概念1.2、工作原理1.3、技術選型1.4、原理解析1.4.1、實現接口1.4.2、工具調用二、工具調用&#xff08;Tool Calling&#xff09;開發2.1、文件操作2.1.1、概念描述2.1.2、概念描述2.2、聯網搜索…

Redis客戶端使用(Client、Java、SpringBoot)

上篇文章&#xff1a; Redis數據類型之zsethttps://blog.csdn.net/sniper_fandc/article/details/149139955?fromshareblogdetail&sharetypeblogdetail&sharerId149139955&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 Redis客戶端…

Modbus 開發工具實戰:ModScan32 與 Wireshark 抓包分析(一

引言 ** 在工業自動化領域&#xff0c;Modbus 協議猶如一座橋梁&#xff0c;連接著各種電子設備&#xff0c;實現它們之間高效的數據交互。從可編程邏輯控制器&#xff08;PLC&#xff09;到人機界面&#xff08;HMI&#xff09;&#xff0c;再到各類智能傳感器&#xff0c;M…

Oracle SQL - 使用行轉列PIVOT減少表重復掃描(實例)

[13/JUL/2025, Yusuf Leo, Oracle SQL Performance Tuning Series]我們經常會遇到從同一表中按不同維度取出不同區間的數據&#xff0c;再以相同的屬性將這些數據分別匯總到一起的需求。這類需求往往迫使我們對同一個表反復去掃描&#xff0c;當原始數據量太大的時候&#xff0…

HTTP 請求方法詳解:GET、POST、PUT、DELETE 等

在 HTTP 協議中&#xff0c;請求方法&#xff08;也稱為 HTTP 動詞&#xff09;定義了客戶端希望對指定資源執行的操作類型。這些方法是 HTTP 報文的核心組成部分&#xff0c;決定了請求的目的和行為。 主要 HTTP 請求方法 1. GET 用途&#xff1a;獲取資源 特點&#xff1a…

Android 代碼熱度統計(概述)

1. 前言 代碼熱度統計&#xff0c;在測試中一般也叫做代碼覆蓋率。一般得到代碼覆蓋率后就能了解整體樣本在線上的代碼使用情況&#xff0c;為無用代碼下線提供依據。 做了一下調研&#xff0c;在Android中一般比較常用的是&#xff1a;JaCoCO覆蓋率統計工具&#xff0c;它采…

RAG優化

RAG搭建本地AI知識庫&#xff0c;在使用過程中遇到的三大痛點&#xff0c;以及相應的進階方案。1. RAG知識庫的三大痛點-- 內容理解不足&#xff1a;AI難以全面理解導入資料的內容&#xff0c;比如在向量編碼時候&#xff0c;生硬的截斷等導致分析結果不理想。eg: 知識庫分割器…

Ubuntu 24.04 啟用 root 圖形登錄

關鍵詞&#xff1a;Ubuntu 24.04、root 登錄、GDM、SSH、nano、配置文件一、前言 Ubuntu 默認禁用 root 賬戶 的圖形與 SSH 登錄&#xff0c;這是為了安全。但在某些場景&#xff08;如測試、救援、自動化腳本&#xff09;你可能需要 直接用 root 登錄 GNOME 桌面。本文以 Ubun…

Jekyll + Chirpy + GitHub Pages 搭建博客

Chirpy 是適用于技術寫作的簡約、響應迅速且功能豐富的 Jekyll 主題&#xff0c;文檔地址&#xff1a;https://chirpy.cotes.page/ &#xff0c;Github 地址&#xff1a;jekyll-theme-chirpy 。 1.開始 打開 chirpy-starter 倉庫&#xff0c;點擊按鈕 Use this template -->…

學習 Flutter (一)

學習 Flutter (一) 1. 引言 什么是 Flutter&#xff1f; Flutter 是 Google 開發的一套開源 UI 框架&#xff0c;主要用于構建高性能、高保真、跨平臺的應用程序。使用一套 Dart 編寫的代碼&#xff0c;開發者可以同時構建適用于&#xff1a; Android iOS Web Windows、mac…

Spring Boot 實現圖片防盜鏈:Referer 校驗與 Token 簽名校驗完整指南

Spring Boot 實現圖片防盜鏈教程&#xff08;Referer 校驗 Token 簽名校驗&#xff09;本文將詳細講解兩種防盜鏈實現方案&#xff0c;并提供完整代碼示例。方案一&#xff1a;Referer 校驗通過檢查 HTTP 請求頭中的 Referer 字段判斷來源是否合法。實現步驟創建 Referer 攔截…

從 JSON 到 Python 對象:一次通透的序列化與反序列化之旅

目錄 一、為什么要談 JSON 二、最快速上手&#xff1a;兩把鑰匙 dumps 與 loads 三、深入 dumps&#xff1a;參數是魔法棒 四、深入 loads&#xff1a;把風險擋在門外 五、文件級序列化&#xff1a;dump 與 load 六、處理中文與編碼陷阱 七、異常場景與調試技巧 八、實…

Leetcode 3315. 構造最小位運算數組 II

1.題目基本信息 1.1.題目描述 給你一個長度為 n 的質數數組 nums 。你的任務是返回一個長度為 n 的數組 ans &#xff0c;對于每個下標 i &#xff0c;以下 條件 均成立&#xff1a; ans[i] OR (ans[i] 1) nums[i] 除此以外&#xff0c;你需要 最小化 結果數組里每一個 a…