MCU點燈實驗小結

来源:https://www.cnblogs.com/cino/p/18272119
-Advertisement-
Play Games

設備採用晶元:STM32F407ZET6 4個LED燈,網路標號分別為LED0 ,LED1,FSMC D10,FSMC D11。對應的引腳號分別為PF9,PF10,PE12,PE13。 GPIO外設基本概念 General-Purpose Input Output,通用型輸入輸出的,也簡稱I/O口, ...


設備採用晶元:STM32F407ZET6

4個LED燈,網路標號分別為LED0 ,LED1,FSMC D10,FSMC D11。對應的引腳號分別為PF9,PF10,PE12,PE13。

GPIO外設基本概念

General-Purpose Input Output,通用型輸入輸出的,也簡稱I/O口,有時也簡寫為IO口。用於電信號的傳遞,以實現與外部器件的通信、控制外部器件或者採集外部器件數據的功能。(在本次所用晶元中,共有114個GPIO引腳。)

對於MCU設備和感測器之間,一般採用TTL電平信號,即傳輸的電平信號>2.4V就表示高電平,<0.4V就表示低電平。(另外還有RS232RS485標準)

一般IO口的命名是由P(Pin)開頭,分為很多組(埠),以字母AH來命名,每個組(埠)有16個引腳,引腳的編號為015,所以如埠A引腳範圍: PA0 ~ PA15 埠B引腳範圍:PB0~PB15。

第一步 . 查找相應部分的原理圖

第二步 .分析原理圖

如上圖所示,該處發光二極體為單嚮導電性,輸出電平信號0才能使電路走通。如果輸出電平信號1,則二極體兩端電壓平衡,無法形成電流。

發光二極體需要單獨深入學習。

第三步 . 程式設計

1. 亮燈代碼實例部分展示:

//1.定義變數
GPIO_InitTypeDef  GPIO_InitStructureF;//F埠
GPIO_InitTypeDef  GPIO_InitStructureE;//E埠
int main()//中文註釋
{
	//2.時鐘控制
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
	
   //3.設置結構體變數 F埠
   GPIO_InitStructureF.GPIO_Pin =  GPIO_Pin_9| GPIO_Pin_10;
   GPIO_InitStructureF.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructureF.GPIO_OType = GPIO_OType_PP;//推輓模式PP(都可以輸出),開漏輸出OD(只能輸出低電平)
   GPIO_InitStructureF.GPIO_Speed = GPIO_Speed_2MHz;
   GPIO_InitStructureF.GPIO_PuPd = GPIO_PuPd_NOPULL;
   GPIO_Init(GPIOF, &GPIO_InitStructureF);
	
   //3.設置結構體變數 E埠
   GPIO_InitStructureE.GPIO_Pin =  GPIO_Pin_13| GPIO_Pin_14;
   GPIO_InitStructureE.GPIO_Mode = GPIO_Mode_OUT;
   GPIO_InitStructureE.GPIO_OType = GPIO_OType_PP;
   GPIO_InitStructureE.GPIO_Speed = GPIO_Speed_2MHz;
   GPIO_InitStructureE.GPIO_PuPd = GPIO_PuPd_NOPULL;
   GPIO_Init(GPIOE, &GPIO_InitStructureE);
	 while (1)
   {
	   //亮燈
     GPIOF->BSRRL =GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_13| GPIO_Pin_14;
     GPIOE->BSRRL = GPIO_Pin_13| GPIO_Pin_14;
	return 0;
}

2. 代碼拆分:

定義外設的結構體變數

GPIO外設結構體原型及代表含義如下:

typedef struct
{
  uint32_t GPIO_Pin;              
    //指定要配置的GPIO引腳。此參數可以是以下參數之一,設置與引腳號對應的編號
    /*
#define GPIO_Pin_0                 ((uint16_t)0x0001)  
#define GPIO_Pin_1                 ((uint16_t)0x0002) 
...
#define GPIO_Pin_15                ((uint16_t)0x8000)  
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  
...
*/

  GPIOMode_TypeDef GPIO_Mode;     
    // 指定選定引腳的操作模式,設置為以下參數之一
    /*
  GPIO_Mode_IN   = 0x00, //輸入模式,用得較多
  GPIO_Mode_OUT  = 0x01, //輸出模式,用的最多
  GPIO_Mode_AF   = 0x02, //復用模式,偶爾用
  GPIO_Mode_AN   = 0x03  //模擬模式
    */

  GPIOSpeed_TypeDef GPIO_Speed;   
    // 指定選定引腳的速度,設置為以下參數之一,輸出速度指的是引腳電平的翻轉速度,如果選擇高速,則會增加功耗和雜訊。
    /*
  GPIO_Low_Speed     = 0x00, //2MHz
  GPIO_Medium_Speed  = 0x01, //25MHz
  GPIO_Fast_Speed    = 0x02, //50MHz
  GPIO_High_Speed    = 0x03  //100MHz
    */
                                       
  GPIOOType_TypeDef GPIO_OType;  
    //指定選定引腳的操作輸出類型,設置為以下參數之一
    /*
  GPIO_OType_PP = 0x00, //推輓輸出,可以輸出高和低電平
  GPIO_OType_OD = 0x01  //開漏輸出,只能輸出低電平,不能輸出高電平
    */

  GPIOPuPd_TypeDef GPIO_PuPd;     
    //指定選定接點的操作上拉/下拉,即GPIO引腳的內部電阻,設置為以下參數之一
   /*
  GPIO_PuPd_NOPULL = 0x00,
  GPIO_PuPd_UP     = 0x01,//上拉電阻,當外部沒有電平輸入或輸出時,可以給GPIO引腳一個預設的高電平狀態
  GPIO_PuPd_DOWN   = 0x02//下拉電阻,當外部沒有電平輸入或輸出時,可以給GPIO引腳一個預設的低電平狀態
   */
    }GPIO_InitTypeDef;
時鐘控制

打開GPIO的外設時鐘

 //函數原型
 void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
 //用法示例
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

​ 因為STM32屬於低功耗的MCU,而為了降低功耗,所以STM32的MCU在複位之後預設會關閉絕大多數的外設的時鐘,所以用戶想要使用MCU內部的某個外設,就必須打開該外設的時鐘(clock)。

對GPIO外設的初始化結構體中成員進行賦值

根據GPIO外設結構體原型,對每一個結構體成員進行賦值,解釋如下:

GPIO_InitStructureE.GPIO_Pin =  GPIO_Pin_13| GPIO_Pin_14;//對13和14引腳進行操作
GPIO_InitStructureE.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
GPIO_InitStructureE.GPIO_OType = GPIO_OType_PP;//推輓輸出
GPIO_InitStructureE.GPIO_Speed = GPIO_Speed_100MHz;//設置速率,預設選最高
GPIO_InitStructureE.GPIO_PuPd = GPIO_PuPd_NOPULL;
通過init函數對把GPIO結構體中的值寫入到GPIO埠寄存器,完成初始化
 //函數原型
 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
 //用法示例
 GPIO_Init(GPIOE, &GPIO_InitStructure);

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 深入介紹Windows 7操作系統的基礎知識、功能特性、分類和基本操作技巧,包括核心功能、特征、分類、安裝方法、啟動、文件管理、個性化設置等方面。旨在幫助用戶深入理解Windows 7,並掌握提高工作效率和個性化設置的實用技巧。 ...
  • ​ 在之前的文章:《QEMU/KVM啟動物理分區的Windows並調優》中筆者使用mdadm創建線性陣列,使VM啟動物理硬碟分區上的Windows系統。這個做法思路清晰且具有實操性,但根據這個issue,Linux內核上游已將CONFIG_MD_LINEAR編譯參數棄置了,這意味著在6.8及以後的內 ...
  • sed命令是用於對文本文件做內容操作的神器,常見的增刪改都可以,熟練運用可提高shell腳本編寫能力和在terminal下的工作效率。 ...
  • 簡要:Win安裝WSL(Windows Subsystem for Linux)主要是在win系統可以運行linux系統,下麵詳解介紹如何安裝WSL和Ubuntu以及Ubuntu一些簡單配置 一、安裝WSL 可以參考官網內容->WSL相關介紹 1、使用圖像界面 打開控制面板(win+r輸入contr ...
  • 基於ESP8266網路天氣時鐘的OLED顯示 註意修改 WiFi 名稱和密碼 需要申請【心知天氣】API私鑰 心知天氣URL:https://www.seniverse.com /* 參考: https://blog.csdn.net/weixin_44668788/article/details/ ...
  • 寄存器,本質上就是單片機內部的RAM存儲器,用來暫時存放參與運算的數據和運算結果。一個寄存器由若幹個鎖存器或者觸發器組成。比如STM32的一個寄存器有32位,則由32個觸發器組成。 STM32的寄存器包括通用寄存器、控制寄存器以及外設寄存器,每種寄存器都有其特定的功能和用途。而且在技術手冊占了非常多 ...
  • 今天我在安裝qview並運行時時,遇到了這個問題。 我在網上查找了許多解決方案,但它們大多都說是某些dll缺失或錯誤引起的。 這些說法應該是正確的,但我用了dll修複工具後,一點用都沒有。 後來搗鼓半天後,我發現很可能是visual c++出了問題。後來的事實證明,確實是這樣。 我在微軟官網下載了最 ...
  • 目錄TTL、RS232、RS485三種協議介紹TTL(Transistor-Transistor Logic)串口通信協議工作原理:TTL電平標準:特點:優勢:缺點:TTL協議混淆點澄清:擴展學習:COMS技術CMOS技術的工作方式:主要特點:CMOS技術的局限性:RS232協議工作原理:特點:優勢 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...