iic、spi以及uart

何為總線?

連接多個部件的信息傳輸線,是部件共享的傳輸介質

總線的作用?

實現數據傳輸,即模塊之間的通信

總線如何分類?

根據總線連接的外設屬于內部外設還是外部外設將總線可以分為片內總線和片外總線

可分為數據按位順序傳輸占用引腳較少但是速度相對較慢的串行通信 和? 數據各個位同時傳輸,速度較快但是占用引腳資源多的并行傳輸

又根據收發數據根據對時鐘信號的依賴關系區分為同步通信 和 異步通信

根據數據的傳輸方向性,又將通信可區分為 單工,半雙工 和雙 工,

其中UART是串行全雙工異步通信、IIC是串行半雙工同步通信、spi是串行全雙工同步通信。


UART(Universal asynchronous receiver/transmitter\通用異步接收發送器)

串口用于兩個模塊之間進行異步全雙工串行通信

將TXD和RXD交叉連接,然后將接地線接地(TXD數據發送線,RXD數據接收線)

TTL電平3.3\5邏輯1,接地邏輯0

特點:易被干擾源干擾,抗干擾能力弱,一般只適用于同一塊板子上面的兩個芯片之間盡心數據收發

關于串口的配置:

1.設置8bit數據位

2.設置無校驗位

3.設置1bit停止位

4.設置波特率為115200

5.設置16倍過采樣

6.使能發送器 TE

7.使能接收器 RE

8.使能串口 UE

9.發送數據:

判斷發送數據寄存器是否為空 TXE==1

為空則向發送數據寄存器寫入,不為空則等待

等待發送完成TC==1,此時發送結束

10.接收數據 :

判斷接收數據寄存器不為空 RXNE==1

不為空可以讀取

使用流程:

1.使能UART外設時鐘和對應的GPIO口的時鐘

2.功能復用,將對應的GPIO口復用為串口功能

3.禁用串口

4.設置數據幀格式(8N1)

5.設置分頻、采樣、波特率(注:采樣常用的是16倍過采樣)

6.使能發送器

7.使能接收器

8.使能串口(與第三步交相呼應)

UART相關的 HAL庫函數

HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

注:

兩個函數均會阻塞

串口進行數據打印需要將printf函數重映射(重寫fputc)


IIC(i2c)

最大支持多主機多從機通信

SDA&SCL,多從機并聯入雙線,雙線空閑保持高電平,需要接上拉電阻

信號分類:起始信號、終止信號、應答信號、非應答信號、數據接收和發送信號

注:起始信號終止信號均由主機發起

IIC數據格式

具體格式都是由各個傳感器各自的協議去制定格式,但是大致流程基本相同

起始信號 -7位從機地址為加寫標志位-(應答/非應答)-8位從機寄存器地址-8位數據-(應答\非應答)- 結束信號

起始信號 -7位從機地址為加寫標志位-(應答/非應答)-8位從機寄存器地址-起始信號-7位從機地址加讀標志位-(應答/非應答)-數據-(應答\非應答)- 結束信號

通信速率為100k、400k、1M和3.4M

使用流程:

1.使能對應的端口時鐘

2.設置管腳(輸出模式,輸出速度,上拉下拉電阻)

3.SDA&SCL雙線拉高空閑

4.信號函數的封裝(一般直接down,會封裝就更nice了)

5.信號函數的調用

注:重難點在對對應傳感器手冊的查詢

IIC相關的HAL庫函數

HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)


SPI(Serial Peripheral interface)串行外圍設備接口

最大支持一主機多從機

是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議。

不再采用具體的數據格式,而是采用具體的通信規則

通過約定好的通信時鐘極性和時鐘相性去使數據線進行對應的數據的采集和數據的輸出

使用流程

更加依賴被控制的芯片的手冊,比如控制數碼燈的各類三八譯碼器或者是控制OLED屏時相關OLED屏的數據手冊

SPI相關的HAL庫函數

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

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

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

相關文章

“破冰”探索兩周年,AI和媒體碰撞出了什么火花?

2022年末,大模型浪潮席卷而來。在“所有行業都值得用AI重塑”的氛圍下,各個行業都受到了影響和沖擊。 其中新聞媒體可以說是受影響最為劇烈的行業。 因為內容的生產方式被重新定義,媒體從業者普遍存在焦慮情緒:擔心錯過新一輪的…

DeepSeek明確學術研究方向效果如何?

明確學術研究方向 在學術寫作中,選擇一個出色的研究主題至關重要,因為它直接關系到論文是否能登上高級別的學術期刊。不少學者在這個過程中走入了誤區,他們往往將大把的時間花在寫作本身,而忽略了對選題的深入思考,這…

WPF實戰案例 | C# WPF實現大學選課系統

WPF實戰案例 | C# WPF實現大學選課系統 一、設計來源1.1 主界面1.2 登錄界面1.3 新增課程界面1.4 修改密碼界面 二、效果和源碼2.1 界面設計(XAML)2.2 代碼邏輯(C#) 源碼下載更多優質源碼分享 作者:xcLeigh 文章地址&a…

《 C++ 點滴漫談: 二十四 》深入 C++ 變量與類型的世界:高性能編程的根基

摘要 本文深入探討了 C 中變量與類型的方方面面,包括變量的基本概念、基本與復合數據類型、動態類型與內存管理、類型推導與模板支持,以及類型系統的高級特性。通過全面的理論講解與實際案例分析,展示了 C 類型系統的強大靈活性與實踐價值。…

STM32 GPIO配置 點亮LED燈

本次是基于STM32F407ZET6做一個GPIO配置,實現點燈實驗。 新建文件 LED.c、LED.h文件,將其封裝到Driver文件中。 雙擊Driver文件將LED.c添加進來 編寫頭文件,這里注意需要將Driver頭文件聲明一下。 在LED.c、main.c里面引入頭文件LED.h LED初…

window保存好看的桌面壁紙

1、按下【WINR】快捷鍵調出“運行”窗口,輸入以下命令后回車。 %localappdata%\Packages\Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy\LocalState\Assets 2、依次點擊【查看】【顯示】,勾選【隱藏的項目】,然后按【CtrlA】全部…

TCP 三次握手四次揮手

目錄 TCP 三次握手 1. SYN (Synchronize:同步) 2. SYN-ACK (Synchronize Acknowledge:同步確認) 3. ACK (Acknowledge:確認) 為什么是三次而不是兩次或四次? 三次握手的作用 TCP 四次揮手 第一次揮手:客戶端發送 FIN …

C語言初階牛客網刷題—— HJ34 圖片整理【難度:中等】

1. 題目描述 牛客網在線OJ鏈接 Lily上課時使用字母數字圖片教小朋友們學習英語單詞,每次都需要把這些圖片按照大小(ASCII碼值從小到大)排列收好。請大家給Lily幫忙,通過C語言解決。 輸入描述:Lily使用的圖片包括 “A…

MVCC底層原理實現

MVCC的實現原理 了解實現原理之前,先理解下面幾個組件的內容 1、 當前讀和快照讀 先普及一下什么是當前讀和快照讀。 當前讀:讀取數據的最新版本,并對數據進行加鎖。 例如:insert、update、delete、select for update、 sele…

python實現http文件服務器訪問下載

//1.py import http.server import socketserver import os import threading import sys# 獲取當前腳本所在的目錄 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 設置服務器的端口 PORT 8000# 自定義Handler,將根目錄設置為腳本所在目錄 class MyHTT…

Cpp::靜態 動態的類型轉換全解析(36)

文章目錄 前言一、C語言中的類型轉換二、為什么C會有四種類型轉換?內置類型 -> 自定義類型自定義類型 -> 內置類型自定義類型 -> 自定義類型隱式類型轉換的坑 三、C強制類型轉換static_castreinterpret_castconst_castdynamic_cast 四、RTTI總結 前言 Hell…

2024年終總結:技術成長與突破之路

文章目錄 前言一、技術成長:菜鳥成長之路1. 學習與實踐的結合2. 技術分享與社區交流 二、生活與事業的平衡:技術之外的思考1. 時間管理與效率提升2. 技術對生活的積極影響 三、突破與展望:未來之路1. 技術領域的突破2. 未來規劃與目標 四、結…

ComfyUI實現老照片修復——AI修復老照片(ComfyUI-ReActor / ReSwapper)解決天坑問題及加速pip下載

AI修復老照片,試試吧,不一定好~~哈哈 2023年4月曾用過ComfyUI,當時就感慨這個工具和虛幻的藍圖很像,以后肯定是專業人玩的。 2024年我寫代碼去了,AI做圖沒太關注,沒想到,現在ComfyUI真的變成了工…

思科交換機telnet配置案例

目錄 1.telnet簡述2.網絡拓撲3.設備說明4.網絡配置4.1 電腦PC ip設置4.2 網絡交換機telnet配置 5.小結 1.telnet簡述 Telnet是遠程登錄服務的一個協議,該協議定義了遠程登錄用戶與服務器交互的方式。它允許用戶在一臺聯網的計算機上登錄到一個遠程分時系統中&#…

WPS數據分析000006

一、排序 開始→ 排序 同文件→選項→自定義序列→輸入序列 二、篩選 高級篩選 條件區域要與列表區域一樣。 三、條件格式

vofa++使用方法

控件區可以添加控件用來啊多樣顯示 點擊一個控件然后右鍵可以選擇要添加顯示的數據,點all表全部顯示, 點auto可以自動布局 要用控件需要選擇協議,不知道協議具體格式可以點擊問號看看,并且最好用printf重定義來實現 比如我要實現F…

達夢拷貝DM_HOME的復制安裝

近期一個項目需求,需要在沒有安裝包的情況下,將達夢數據庫安裝到虛機上(生產機上安裝了達夢),故采用直接打包生產機DM_HOME的方式拷貝至虛機,再依次執行達夢的部分指令完成安裝。以下為驗證的步驟&#xff…

tomcat的accept-count、max-connections、max-threads三個參數的含義

tomcat的accept-count、max-connections、max-threads三個參數的含義 tomcat的accept-count、max-connections、max-threads三個參數的含義 max-connections:最大連接數 最大連接數是指,同一時刻,能夠連接的最大請求數 需要注意的是&#x…

ui文件轉py程序的工具

源博客連接: PyCharm中利用外部工具uic轉成的py文件,里面全是C代碼,并非python類型的代碼,導致大量報錯。。。_pyside6-uic為什么把ui轉為了c-CSDN博客 如果想把ui文件轉為py文件,首先設置pycharm的外部工具&#xf…

hedfs和hive數據遷移后校驗腳本

先談論校驗方法,本人騰訊云大數據工程師。 1、hdfs的校驗 這個通常就是distcp校驗,hdfs通過distcp遷移到另一個集群,怎么校驗你的對不對。 有人會說,默認會有校驗CRC校驗。我們關閉了,為什么關閉?全量遷…