STM32之MCU和GPIO

一、單片機MCU

1.1 單片機和嵌入式

  1. 嵌入式系統
    以計算機為核心,tips:計算機【處理單元,內存 + 硬盤】
    可以控制的外部設備,傳感器,電機,繼電器
    嵌入式開發 數據源 --> 處理器(CPU MCU MPU) --> 執行器
    計算機通過硬件連接和程序控制,讓整個設備可以滿足用戶的需求,例如 智能手表,汽車駕駛輔助,無人機,武器系統,智能家居。
  2. 單片機 --> MCU
    MCU (Microcontroller Unit) 微型控制單元,主要包括
    中央處理器,指令處理單元
    ROM 硬盤/存儲空間
    RAM 運行內存
    可以認為 MCU 是一個小型計算機系統。具備獨立運行控制執行的作用。

1.2 ARM公司

????????ARM Holdings(Advanced RISC Machines)不生產芯片,僅提供芯片設計方案和芯片解決方案。
以下是 ARM 公司對外提供的芯片內核方案:
????????Cortex-A 內核,更新頻率更快,性能最好,緊跟市場潮流!!!主要用于要求性能較高,能
耗支持較高的使用場景,利用手機 SOC/高通,小米,聯發科,蘋果。車機芯片,ARM 開發
板。后續驅動課程使用的芯片 RK3399 (dual-core Cortex-A72 and quad-core Cortex-A53)
RK3588 基于 Cortex-A 內核
????????Cortex-R 內核 常見場景有車輛 ECU,要求響應速度較快常見
????????Cortex-M 內核 主要用于 MCU 微型處理器,目前主流的內核方案有 M0 M3 M4 M7, 常見
MCU STM32F1XX(M3 內核) STM32F4XX(M4 內核) STM32H7XX(M7 內核)

1.3 常用的32芯片

  • 國外芯片
    • ST 系列:由 STM 意法半導體公司生產,常用型號有 STMF1、STMF4、STMH7、STMLXX、STMW 等。
    • Ti 系列:美國德州儀器公司的產品,該公司是世界上最大的 DSP(數據信號處理)芯片提供商,例如 TM320F28335PGFA。
  • 國內芯片
    • GD 兆易創新:是目前國內 32 MCU 芯片領域的領頭企業,內核采用 ARM 公司提供的 Cortex - M 系列,且完整兼容 STM32 芯片。
    • 樂鑫科技:有 ESP32 芯片,以及 WiFi 芯片 ESP8266。
    • 華大半導體。
    • 沁恒微電子。
    • 靈動微電子。
  • 國產自研芯片:架構、內核、知識產權均為國內自主研發。
    • 龍芯:主要面向服務器、PC 工業控制、武器裝備、政府設施等領域的芯片解決方案。
    • 海思:華為旗下的芯片公司。
    • 國內車企(如吉利、蔚來、小鵬、長安等)都在自研芯片。
  • 目前國內大多數公司都在轉向國產芯片方案,這是為了芯片安全和信息安全。學習 STM32 的重點內容是【寄存器操作方式】和【32 標準庫方式】開發。

1.4 STM32開發板概述

  • STM32 是意法半導體公司基于 ARMv7 Cortex - M 內核設計的 32 位 MCU 芯片。
  • F 表示通用型號,還有 L、H、W、G 相關系列。
  • 103 表示增強型。
  • F1xx 表明當前內核為 Cortex - M3 內核。
  • ZET6 各部分含義:
    • Z:表示引腳數為 144。
    • E:表示閃存 Flash 為 512KB,屬于大容量存儲設備。
    • T:表示封裝標準為 LQFP 封裝。
    • 6:表示工作溫度限制在 - 40℃~85℃。

二、 GPIO

2.1 GPIO概述

2.1 GPIO 概述
????????GPIO(General Purpose Input/Output)是 STM32 微控制器最基本、最常用的外設之一,用于與外部設備進行數字信號交互(如控制 LED、讀取按鍵、驅動傳感器等)。
咱們學習 Hi3861 中利用 GPIO 完成了 LED 控制,按鍵控制,傳感器數據讀取,蜂鳴器控制,利用 GPIO 模版 PWM 控制舵機。
GPIO 的控制核心邏輯

  • 輸入輸出控制
  • 高低電平控制
    在當前 STM32F103ZET6 中一共有
  • 7 組 GPIO 分別對應 GPIOA~GPIOG 分組。
  • 同時每一個 GPIO 分組對應 16 個對外引腳,流入 GPIOA00~GPIOA15 ==>PA0~PA15
  • STM32F103ZET6 對外可以提供可編程 GPIO 引腳一共是 16 * 7 ==> 112 引腳

2.2 STM32F103ZET6 原理圖簡單分析

?????????原理圖是開發中重要的參考依據,通過原理圖分析當前 MCU 芯片引腳對應的功能模塊,已經控制方式分析。以 LED 燈為例分析,當前開發板中 DS0 絲印位號對應的 LED 燈在原理圖中,對應的引腳為 LED0。

2.3 GPIO STM32模式

在 STM32 開發中,操作 GPIO 需要確定的內容有:

  • 那一組 GPIO,例如 GPIOB。
  • 操作的 GPIO 是當前組內第幾個 Pin 引腳,對應引腳為 5 引腳 ==> GPIOB5 ==> PB5。
  • 設置 GPIO 的工作模式。

2.3.1. 浮空輸入模式(Floating Input
原理:在這種模式下,GPIO 引腳沒有接上拉電阻或下拉電阻,其電平狀態完全取決于外部電路。引腳處于高阻抗狀態,輸入電流幾乎為零。
應用場景:適用于外部信號已經有明確的驅動能力和電平狀態的情況,比如連接按鍵,按鍵
按下時直接將引腳接地,松開時引腳浮空,通過讀取引腳電平判斷按鍵狀態。
2.3.2. 上拉輸入模式(Pull - up Inpu
原理GPIO 引腳內部連接了上拉電阻,當外部電路沒有對引腳進行驅動時,引腳電平被上拉到高電平。如果外部電路將引腳拉低,那么引腳電平就為低電平。
應用場景:常用于按鍵輸入,當按鍵未按下時,引腳通過上拉電阻保持高電平;按鍵按下
時,引腳接地變為低電平,避免了引腳浮空可能帶來的電平不穩定問題。
2.3.3. 下拉輸入模式(Pull - down Input
原理:與上拉輸入模式相反,GPIO 引腳內部連接了下拉電阻,當外部電路沒有對引腳進行驅動時,引腳電平被下拉到低電平。如果外部電路將引腳拉高,那么引腳電平就為高電平。
應用場景:同樣適用于按鍵輸入等場景,當按鍵未按下時,引腳通過下拉電阻保持低電平;
按鍵按下時,引腳接高電平。
2.3.4. 模擬輸入模式(Analog Input
原理:該模式下,GPIO 引腳用于模擬信號的輸入,內部的數字邏輯電路被斷開,引腳直接連接到模擬信號處理模塊,如 ADC(模擬 - 數字轉換器)。
應用場景:用于采集模擬信號,如溫度傳感器、壓力傳感器等輸出的模擬電壓信號,通過
ADC 將模擬信號轉換為數字信號進行處理。
2.3.5. 開漏輸出模式(Open - Drain Output
原理:在開漏輸出模式下,GPIO 引腳內部的輸出級只有 N 溝道 MOS 管,當輸出為低電平
時,MOS 管導通,引腳接地;當輸出為高電平時,MOS 管截止,引腳處于高阻態,需要外
部接上拉電阻才能輸出高電平。
應用場景:常用于實現線與功能I2C 總線等通信協議,多個開漏輸出引腳可以連接在一
起,只要有一個引腳輸出低電平,總線就為低電平。
2.3.6. 推挽輸出模式(Push - Pull Output
原理:推挽輸出模式下,GPIO 引腳內部的輸出級由 P 溝道 MOS 管和 N 溝道 MOS 管組成。當輸出為高電平時,P 溝道 MOS 管導通,引腳輸出高電平;當輸出為低電平時,N 溝道 MOS 管導通,引腳輸出低電平。
應用場景:適用于直接驅動一些負載,如 LED 燈,能夠提供較強的驅動能力。
2.3.7. 復用開漏輸出模式(Alternate Function Open - Drain Output
原理:該模式下,GPIO 引腳的功能由片上外設控制,輸出級采用開漏輸出結構。與普通開漏輸出模式類似,需要外部接上拉電阻才能輸出高電平。
應用場景:常用于一些通信協議和外設接口,如 SPI 總線的某些引腳、I2C 總線等,將 GPIO 引腳復用為外設的特定功能。
2.3.8. 復用推挽輸出模式(Alternate Function Push - Pull Output
原理:此模式下,GPIO 引腳的功能由片上外設控制,輸出級采用推挽輸出結構,能夠直接輸出高電平和低電平。
應用場景:常用于一些需要較強驅動能力的外設接口,如 UART 通信的發送引腳、PWM
號輸出等。

2.4 LED開發流程

2.4.1 LED 燈電路分析

2.4.2 LED STM32 開發流程

? ? ? ? 1.【使能】時鐘。
? ? ? ? 2.GPIO PB5 PE5 設置【推挽輸出模式(Push - Pull Output)】
? ? ? ? 3. 利用寄存器控制 PB5 PE5 引腳電平模式

2.4.3 【時鐘】小重點

????????時鐘可以認為是當前 MCU 的處理能力,運算能力。
????????STM32F103ZET6 對應的最高主頻 72MHz當前 MCU 1 秒中可以處理 72M 任務單元。每一個任 務單元對應的時間為 13.88 ns
????????在 MCU 執行過程中,如果沒有打開對應的外設時鐘,對應外設不會在整個的 MCU 執行周期內容 工作,可以認為是沒有開啟任務模塊。
????????MCU 為了管理不同的外設,提供時【鐘樹管】理不同的模塊。

2.4.4 LED 對應 GPIO 組時鐘使能

【寄存器開發模式】
????????利用 STM32 時鐘寄存器,開啟對應 APB2 中的 GPIOB GPIOE 兩個 GPIO 組時鐘使能。MCU 才可以在執行周期中,運行 GPIOB GPIOE 內容。
????????對應文檔中的內容是 RCC (Reset & Clock Control) 復位和時鐘控制。

2.4.5 LED 對應 GPIO 引腳配置

使能之后,需要對引腳進行選擇。 STM32 中的 GPIO 配置寄存器對應有兩個寄存器
????????GPIOx_CRL 低位寄存器 --> GPIO 0 ~ 7 Pin
????????GPIOx_CRH 高位寄存器 --> GPIO 8 ~ 15 Pin
當前操作的引腳是 PB5 PE5 對應 GPIOx_CRL 低位配置寄存器。
GPIOx_CRL GPIOx_CRH 4 個二進制為對應一個 GPIO 引腳
????????CNFx (x ==> 0~15) 配置當前 GPIO?

總結效果

  • 輸出模式 CNF + MODE 寄存器位置效果,速度都使用 50MHz 作為基準
    • 0011 推挽輸出模式
    • 0111 開漏輸出模式
    • 1011 復用推挽輸出模式
    • 1111 復用開漏輸出模式
  • 輸入模式 CNF + MODE 寄存器位置效果
    • 0000 模擬輸入
    • 0100 浮空輸入
    • 1000 上拉 / 下拉輸入,需要后續配置 IDR 參數

2.4.6 引腳輸出高低電平配置

????????利用 GPIOx_ODR 寄存器配置當前指定引腳的輸出高電平和低電平狀態

2.4.7?代碼實現

#include "stm32f10x.h"
/*
STM32 核心頭文件,標準頭文件,當前對應 STM32F10x 系列,
當前使用的芯片是 STM32F103ZET6
開發中,需要使用相關函數,相關類型,相關配置都在當前
頭文件中。
*/
void Led_Delay(u32 tim);
int main(void)
{/*1. 時鐘使用,RCC 配置當前 GPIOB 和 GPIOE 兩個 GPIO 組使能。RCC ==> Reset & Clock ControlAPB2ENR 當前 APB2 Bridge 對應寄存器配置,當前 APB2ENR包括 【GPIOA ~ GPIOG】 ADC1,2,3 TIM1 TIM8 USART1 SPI1根據寄存器文檔分析,目標當前寄存器中的數據效果為【高 16 位不考慮,對應保留位】0000 0000 0100 10000x01 ==> 0000 00010x01 << 6 ==> 0100 0000  (GPIOE使能位)0x01 << 3 ==> 0000 1000  (GPIOB使能位)0x01 << 6 | 0x01 << 3  = 0100 1000*/RCC->APB2ENR |= 0x01 << 6; // GPIOE 組使能RCC->APB2ENR |= 0x01 << 3; // GPIOB 組使能/*2. 配置 GPIOB --> PB5 和 GPIOE --> PE5 對應工作模式為【推挽輸出模式】。二進制為效果為 0011 (CNF=00, MODE=11)需要配置 GPIOx_CRL 位 23:20 對應 CNF5 和 MODE5 因為GPIOx_CRL 默認值是 0x44444444 存在基礎數據*//*2.1 對 GPIOx_CRL 位 23:20 默認數據進行擦除。0x0F ==> 0000 11110x0F << 20 ==> 對應位23-20~(0x0F << 20) ==> 清除掩碼*/GPIOB->CRL &= ~(0x0F << 20);GPIOE->CRL &= ~(0x0F << 20);/*2.2 對 GPIOx_CRL 位 23:20 進行數據賦值 0011推挽輸出模式配置: CNF=00, MODE=11 (50MHz)*/GPIOB->CRL |= 0x03 << 20;GPIOE->CRL |= 0x03 << 20;/*3. 控制高低電平,從而控制 LED 亮和滅MCU 引腳輸出高電平 LED 燈滅MCU 引腳輸出低電平 LED 燈亮GPIOx_ODR 控制位 5 對應 PB5 和 PE5 兩個引腳對應 ODR 位 5 數據為 1 高電平,0 低電平*/while (1){GPIOB->ODR &= ~(0x01 << 5); // PB5 低電平 LED0 燈亮GPIOE->ODR |= (0x01 << 5);  // PE5 高電平 LED1 燈滅Led_Delay(200000);GPIOB->ODR |= (0x01 << 5);  // PB5 高電平 LED0 燈滅GPIOE->ODR &= ~(0x01 << 5); // PE5 低電平 LED1 燈亮Led_Delay(200000);}
}// 延時函數
void Led_Delay(u32 tim)
{while (tim--){for (int i = 0; i < 72; i++){// 空循環,用于延時調整}}
}

2.4.8?代碼編譯和燒錄

https://github.com/0voice

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

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

相關文章

22_基于深度學習的桃子成熟度檢測系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

數據結構:二叉樹oj練習

在講今天的題目之前&#xff0c;我們還需要講一下二叉樹的以下特點&#xff1a; 對任意一顆二叉樹&#xff0c;如果度為0的節點個數是n0&#xff0c;度為2的節點個數是n2&#xff0c;則有n0n21. 證明&#xff1a;二叉樹總的節點個數是n&#xff0c;那么有nn0n1n2 二叉樹的度為…

RabbitMQ高級特性——TTL、死信隊列、延遲隊列、事務、消息分發

目錄 一、TTL 1.1設置消息的TTL 1.2設置隊列的TTL 1.3兩者之間的區別 二、死信隊列 2.1死信的概念 2.2死信產生的條件&#xff1a; 2.3死信隊列的實現 死信隊列的工作原理 2.4常??試題 三、延遲隊列 3.1概念 3.2應用場景 3.3RabbitMQ 實現延遲隊列的核心原理 1…

神經網絡設計中關于BN歸一化(Normalization)的討論

在神經網絡的結構中&#xff0c;我們常常可以看見歸一化&#xff08;Normalization&#xff09;如BN的出現&#xff0c;無論是模型的backbone或者是neck的設計都與它有著重大的關系。 因此引發了我對它的思考&#xff0c;接下來我將從 是什么&#xff08;知識領域&#xff0c;誕…

MacOS 安全機制與“文件已損壞”排查完整指南

1. 背景說明macOS 為了保護系統安全&#xff0c;內置了多個安全機制&#xff1a;機制作用是否影響第三方 AppSIP (System Integrity Protection)保護系統關鍵文件/目錄不被篡改高風險 App/驅動可能受限Gatekeeper限制未簽名/未認證 App 運行阻止“未知開發者” App文件隔離屬性…

package.json文件中的devDependencies和dependencies對象有什么區別?

前端項目的package.json文件中&#xff0c;dependencies和devDependencies對象都用于指定項目所依賴的軟件包&#xff0c;但它們在項目的開發和生產環境中的使用有所不同。1.dependencies&#xff1a;dependencies是指定項目在生產環境中運行所需要的依賴項。這些依賴項通常包括…

【最新版】CRMEB Pro版v3.4系統源碼全開源+PC端+uniapp前端+搭建教程

一.系統介紹 crmebPro版 v3.4正式發布&#xff0c;智能任務推送、動態標簽管理、商城AI生產力&#xff0c;煥然一新&#xff0c;不負期待&#xff01;頁面DIY設計功能全面升級&#xff0c;組件更豐富&#xff0c;樣式設計更全面&#xff1b;移動端商家管理&#xff0c;讓商城管…

AI 浪潮下 IT 從業者的職業展望:替代之惑與轉型之道

一、引言1.1 科技變革的浪潮&#xff1a;AI 崛起與 IT 行業震蕩在當今科技飛速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;無疑是最具影響力的變革力量之一。從實驗室的前沿研究到廣泛的商業應用&#xff0c;AI 以驚人的速度滲透到各個領域&#xff0c;徹底改變…

DSP音頻算法移植優化工程師實戰

以下以音頻FIR濾波器算法為例&#xff0c;完整演示從MATLAB原型 → Python驗證 → TI DSP C語言移植優化的全流程&#xff0c;包含關鍵代碼和優化技巧&#xff1a;關鍵優化技術解析&#xff1a; 內存訪問優化使用#pragma DATA_ALIGN確保64位對齊&#xff08;滿足LDDW指令要求&a…

Spark 運行流程核心組件(三)任務執行

一、啟動模式 1、standalone資源申請&#xff1a;Driver向Master申請Executor資源Executor啟動&#xff1a;Master調度Worker啟動Executor注冊通信&#xff1a;Executor直接向Driver注冊 2、YARNDriver向YARN ResourceManager(RM)申請AM容器RM分配NodeManager(NM)啟動AM&#x…

rabbitmq發送的延遲消息時間過長就立即消費了

RabbitMQ延遲消息在設置過長時間后被立即消費的問題&#xff0c;通常與以下原因有關&#xff1a; TTL限制問題 RabbitMQ對消息TTL(Time To Live)有32位整數限制(0-4294967295毫秒)&#xff0c;約49.7天。超過該值的延遲時間會導致消息立即被消費解決方案&#xff1a;確保設置的…

kafka的pull的依據

1. 每次 pull() 是否必須在提交上一批消息的 offset 之后&#xff1f;絕對不需要&#xff01; 提交 offset 和調用 poll() (拉取消息) 是兩個完全獨立的行為。消費者可以連續調用 poll() 多次&#xff0c;期間完全不提交任何 offset。 這是 Kafka 消費者的正常工作模式。提交 o…

學習嵌入式的第二十一天——數據結構——鏈表

單向鏈表特點&#xff1a;存儲的內存空間不連續 。為了彌補順序存儲存劣勢。優勢 插入&#xff0c;刪除 O(1) 動態存儲 &#xff0c;在程序運行期間決定大小。劣勢&#xff1a; 不能隨機訪問 O(N) 節點-> 數據域指針域 順序表(數組) 只有數據域鏈表的操作代碼&#xff1…

Rust Web 全棧開發(十三):發布

Rust Web 全棧開發&#xff08;十三&#xff09;&#xff1a;發布Rust Web 全棧開發&#xff08;十三&#xff09;&#xff1a;發布發布 teacher_service發布 svr測試 teacher_service 和 svr發布 wasm-client測試 wasm-clientRust Web 全棧開發&#xff08;十三&#xff09;&a…

Zephyr 中的 bt_le_per_adv_set_data 函數的介紹和應用方法

目錄 概述 1 函數接口介紹 1.1 函數原型 1.2 功能詳解 2 使用方法 2.1 創建流程 2.1.1 創建擴展廣播實例 2.1.2 設置周期性廣播數據 2.1.3 配置周期性廣播參數 2.1.4 啟動廣播 2.2 主流程函數 2.3 關鍵配置 (prj.conf) 3 高級用法 3.1 大數據分片傳輸 3.2 動態數…

Ansible 角色管理指南

Ansible 角色管理指南 實驗環境設置 以下命令用于準備實驗環境&#xff0c;創建一個工作目錄并配置基本的Ansible設置&#xff1a; # 創建web工作目錄并進入 [azurewhiskycontroller ~]$ mkdir web && cd web# 創建Ansible配置文件 [azurewhiskycontroller web]$ cat &…

【補充】數據庫中有關系統編碼和校驗規則的簡述

一、字符集和校驗規則&#xfeff;1.創建數據庫案例數據庫創建方法&#xff1a;使用CREATE DATABASE語句創建數據庫字符集指定方式&#xff1a;通過CHARACTER SETutf8指定數據庫編碼格式默認配置說明&#xff1a;未指定字符集時默認使用utf8和utf8_general_ci配置文件位置&…

計算機網絡 HTTP1.1、HTTP2、HTTP3 的核心對比及性能分析

以下是 HTTP/1.1、HTTP/2、HTTP/3 的核心對比及性能分析&#xff0c;重點關注 HTTP/3 的性能優勢&#xff1a;&#x1f4ca; HTTP 協議演進對比表特性HTTP/1.1 (1997)HTTP/2 (2015)HTTP/3 (2022)傳輸層協議TCPTCPQUIC (基于 UDP)連接建立TCP 三次握手 TLS 握手 (高延遲)同 HTT…

【計算機視覺與深度學習實戰】07基于Hough變換的答題卡識別技術:原理、實現與生物識別拓展(有完整代碼)

1. 引言 在人工智能和計算機視覺快速發展的今天,自動化圖像識別技術已經滲透到社會生活的各個角落。從工業質檢到醫學影像分析,從自動駕駛到教育評估,計算機視覺技術正在重塑我們與數字世界的交互方式。在這眾多應用中,答題卡識別技術作為教育信息化的重要組成部分,承載著…

《WASM驅動本地PDF與Excel預覽組件的深度實踐》

WASM為何能成為本地文件解析的核心載體,首先需要跳出“前端只能處理輕量任務”的固有認知,從“性能與兼容性平衡”的角度切入。PDF與Excel這類文件格式的解析,本質是對復雜二進制數據的解碼與重構——PDF包含嵌套的對象結構、字體渲染規則和矢量圖形描述,Excel則涉及單元格…