32單片機——LED

LED原理圖如圖所示:?

代碼

DS0和DS1每過500ms一次交替閃爍,實現類似跑馬燈的效果

GPIO輸出配置步驟

(1)使能對應GPIO時鐘

STM32在使用任何外設之前,我們都要先使能其時鐘(下同)。本實驗用到PB5和PE5 兩 個IO 口,因此需要先使能GPIOB和GPIOE 的時鐘

(2)設置對應 GPIO工作模式(推挽輸出)

本實驗GPIO使用推挽輸出模式,控制LED亮滅,通過函數HAL_GPIO_Init設置實現。

(3)控制GPIO 引腳輸出高低電平

在配置好GPIO工作模式后,我們就可以通過HAL_GPIO_WritePin 函數控制GPIO 引腳 輸 出高低電平,從而控制LED的亮滅了。

led.h

#ifndef _LED_H
#define _LED_H
//led初始化
void led_init(void);
#endif

led.c

#include "./BSP/LED/led.h"
#include "./SYSTEM/sys/sys.h"
//led初始化
void led_init(void){
? ? GPIO_InitTypeDef g_gppio_struct;
? ? __HAL_RCC_GPIOE_CLK_ENABLE(); ?//使能時鐘--PE5--LED1
? ? __HAL_RCC_GPIOB_CLK_ENABLE(); ?//使能時鐘--PB5--LED0
? ??
? ? g_gppio_struct.Pin=GPIO_PIN_5;
? ? g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP; ?//推挽輸出
? ? g_gppio_struct.Pull=GPIO_NOPULL; ?//無上下拉
? ? g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH; ?//高速
? ? HAL_GPIO_Init(GPIOE,&g_gppio_struct); ?//初始化LED1
? ??
? ? g_gppio_struct.Pin=GPIO_PIN_5;
? ? g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP; ?//推挽輸出
? ? g_gppio_struct.Pull=GPIO_NOPULL; ?//無上下拉
? ? g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH; ?//高速
? ? HAL_GPIO_Init(GPIOB,&g_gppio_struct); ?//初始化LED0
}

1、使能外設時鐘

我們要使用某個外設,必需先使能該外設時鐘

(1)HAL庫使能某個外設時鐘的方法?

__HAL_RCC_GPIOx_CLK_ENABLE();??

例如:LED0被PB5管腳控制,則xB

(2)HAL庫禁止某個外設時鐘的方法?

__HAL_RCC_GPIOx_CLK_DISABLE();??

2、HAL_GPIO_Init 函數

函數聲明:

void HAL_GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);?

//用于配置GPIO功能模式,還可以設置EXTI功能

2.1 形參1:GPIO_TypeDef *GPIOx

是端口號,GPIOA~GPIOE

2.2 形參2:GPIO_InitTypeDef *GPIO_Init

是GPIO_InitTypeDef類型的結構體變量

typedef struct{
? uint32_t Pin; ? ? ? /*!< 指定要配置的 GPIO 引腳。-------引腳號
? ? ? ? ? ? ? ? ? ? ? ? ? ?此參數可以是 @ref GPIO_pins_define 的任何值 */

? uint32_t Mode; ? ? ?/*!< 指定所選引腳的模式。-------模式設置
? ? ? ? ? ? ? ? ? ? ? ? ? ?此參數可以是 @ref GPIO_mode_define 的值 */

? uint32_t Pull; ? ? ?/*!< 指定所選引腳的 Pull-up 或 Pull-Down 激活。-------上拉下拉設置
? ? ? ? ? ? ? ? ? ? ? ? ? ?此參數可以是 @ref GPIO_pull_define */

? uint32_t Speed; ? ? /*!< 指定選定引腳的速度。-------速度設置
? ? ? ? ? ? ? ? ? ? ? ? ? ?此參數可以是 @ref GPIO_speed_define 的值 */
} GPIO_InitTypeDef;

2.2.1?Pin

表示引腳號,范圍:GPIO_PIN_0 到 GPIO_PIN_15,另外還有 GPIO_PIN_All 和 GPIO_PIN_MASK可選

例如:?LED0被PB5管腳控制,則為GPIO_PIN_5

2.2.2?Mode

是GPIO 的模式選擇,有以下選擇項:?

#define ?GPIO_MODE_INPUT? ? 0x00000000u ? /*!< 輸入模式 ? ? ? ? ? ? ? ? ? */
#define ?GPIO_MODE_OUTPUT_PP? ? 0x00000001u ? /*!< 推挽輸出模式 ? ? ? ? ? ? ? ? */
#define ?GPIO_MODE_OUTPUT_OD? ? 0x00000011u ? /*!< 開漏輸出模式 ? ? ? ? ? ? ? ?*/
#define ?GPIO_MODE_AF_PP ? ? ? ? ? ? ? ? ? ? ? ?0x00000002u ? /*!< 推挽式復用模式? ? ?*/
#define ?GPIO_MODE_AF_OD ? ? ? ? ? ? ? ? ? ? ? ?0x00000012u ? /*!< 開漏式復用 ? ?*/
#define ?GPIO_MODE_AF_INPUT ? ? ? ? ? ? ? ? ? ? GPIO_MODE_INPUT ? ? ? ? ?/*!< Alternate Function Input Mode ? ? ? ? */

#define ?GPIO_MODE_ANALOG ? ? ? ? ? ? ? ? ? ? ? 0x00000003u ? /*!< Analog Mode ?*/

#define ?GPIO_MODE_IT_RISING ? ? ? ? ? ? ? ? ? ?0x10110000u ? /*!< External Interrupt Mode with Rising edge trigger detection ? ? ? ? ?*/
#define ?GPIO_MODE_IT_FALLING ? ? ? ? ? ? ? ? ? 0x10210000u ? /*!< External Interrupt Mode with Falling edge trigger detection ? ? ? ? */
#define ?GPIO_MODE_IT_RISING_FALLING ? ? ? ? ? ?0x10310000u ? /*!< External Interrupt Mode with Rising/Falling edge trigger detection ?*/

#define ?GPIO_MODE_EVT_RISING ? ? ? ? ? ? ? ? ? 0x10120000u ? /*!< External Event Mode with Rising edge trigger detection ? ? ? ? ? ? ? */
#define ?GPIO_MODE_EVT_FALLING ? ? ? ? ? ? ? ? ?0x10220000u ? /*!< External Event Mode with Falling edge trigger detection ? ? ? ? ? ? ?*/
#define ?GPIO_MODE_EVT_RISING_FALLING ? ? ? ? ? 0x10320000u ? /*!< External Event Mode with Rising/Falling edge trigger detection ? ? ? */

2.2.3?Pull

用于配置上下拉電阻,有以下選擇項:

#define ?GPIO_NOPULL? ? ? ? ? ? ?0x00000000u ? /*? ? 無上下拉 ?*/
#define ?GPIO_PULLUP? ? ? ? ? ? ?0x00000001u ? /*? ? ?上拉 ? ? ? ? */
#define ?GPIO_PULLDOWN ? ? ?0x00000002u ? /*? ? ?下拉 ? ? ? ? */?

2.2.4?Speed

用于配置GPIO 的速度,有以下選擇項:

#define ?GPIO_SPEED_FREQ_LOW ? ? ? ? ? ? ?(GPIO_CRL_MODE0_1)? ? ?/*? 低速??*/
#define ?GPIO_SPEED_FREQ_MEDIUM ? ? ? ?(GPIO_CRL_MODE0_0)? ? /*? 中速? */
#define ?GPIO_SPEED_FREQ_HIGH ? ? ? ? ? ? (GPIO_CRL_MODE0)? ? ? ? /*? 高速? */?

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
int main(void){
? ? //固定代碼
? ? HAL_Init();
? ? sys_stm32_clock_init(RCC_PLL_MUL9);
? ? delay_init(72);

? ??
? ? led_init();
? ? HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); ?//點亮
? ? while(1){
? ? ? ? HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); ?//點亮
? ? ? ? delay_ms(200);
? ? ? ? HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); ?//熄滅
? ? ? ? delay_ms(200);
? ? ? ??
? ? ? ? //上述等價于
? ? ? ? /*HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
? ? ? ? delay_ms(200);*/
? ? }
}

每一個文檔在最后都要空2行,不然會出現警告?

1、HAL_GPIO_WritePin 函數?

是 GPIO 口的寫引腳函數。其聲明如下:

void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

(1)形參1:端口號,可以選擇范圍:GPIOA~GPIOG

(2)形參2:引腳號,可以選擇范圍:GPIO_PIN_0~GPIO_PIN_15

(3)形參3:要設置輸出的狀態,有兩個選擇:GPIO_PIN_SET表示高電平,GPIO_PIN_RESET表示低電平

2、HAL_GPIO_TogglePin?函數

是 GPIO 口的電平翻轉函數。其聲明如下:

void HAL_GPIO_TogglePin (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

(1)形參1:端口號,可以選擇范圍:GPIOA~GPIOG

(2)形參2:引腳號,可以選擇范圍:GPIO_PIN_0~GPIO_PIN_15

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

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

相關文章

貪心算法和遺傳算法優劣對比——c#

項目背景&#xff1a;某鋼管廠的鋼筋原材料為 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 種規格 &#xff0c;現用貪心算法和遺傳算法兩種算法進行計算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…

【Java篇】一法不變,萬象歸一:方法封裝與遞歸的思想之道

文章目錄 Java 方法的使用&#xff1a;從基礎到遞歸的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定義1.3 方法調用的執行過程1.4 實參和形參的關系1.5 沒有返回值的方法 二、方法重載2.1 為什么需要方法重載2.2 方法重載的概念2.2.4 C 和 Java 的比較&…

深入理解 HTML 中的<div>和元素:構建網頁結構與樣式的基石

一、引言 在 HTML 的世界里&#xff0c;<div>和元素雖看似普通&#xff0c;卻扮演著極為關鍵的角色。它們就像網頁搭建過程中的萬能積木&#xff0c;能夠將各種 HTML 元素巧妙地組合起來&#xff0c;無論是構建頁面布局&#xff0c;還是對局部內容進行樣式調整&#xff…

《大語言模型》學習筆記(一)

一、什么是大語言模型 大語言模型是指在海量無標注文本數據上進行預訓練得到的大型預訓練語言模型&#xff0c;例如GPT-3&#xff0c;PaLM和LLaMA。大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一種基于深度學習的自然語言處理模型&#xff0c;能…

電力行業中分布式能源管理(Distributed Energy Management System, DEMS)的實現

以下是電力行業中分布式能源管理(Distributed Energy Management System, DEMS)的實現方案,涵蓋系統架構、關鍵技術、核心功能及實施路徑,結合典型場景與代碼示例: 一、系統架構設計 采用云-邊-端三層架構,實現分布式能源的高效協同管理: 1. 終端層(感知層) 設備組…

實驗5 邏輯回歸

實驗5 邏輯回歸 【實驗目的】掌握邏輯回歸算法 【實驗內容】處理樣本&#xff0c;使用邏輯回歸算法進行參數估計&#xff0c;并畫出分類邊界 【實驗要求】寫明實驗步驟&#xff0c;必要時補充截圖 1、參照“2.1梯度下降法實現線性邏輯回歸.ipynb”和“2.2 sklearn實現線性邏輯…

思維訓練讓你更高、更強 |【邏輯思維能力】「刷題訓練筆記」假設法模式邏輯訓練題(1-5)

每日一刷 思維訓練讓你更高、更強&#xff01; 題目1 誰在說謊&#xff0c;誰拿走了零錢&#xff1f; 姐姐上街買菜回來后&#xff0c;就隨手把手里的一些零錢放在了抽屜里&#xff0c;可是&#xff0c;等姐姐下午再去拿錢買菜的時候發現抽屜里的零錢沒有了&#xff0c;于是&…

【愚公系列】《高效使用DeepSeek》004-DeepSeek的產品形態和功能詳解

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

用python代碼將excel中的數據批量寫入Json中的某個字段,生成新的Json文件

需求 需求&#xff1a; 1.將execl文件中的A列賦值給json中的TrackId&#xff0c;B列賦值給json中的OId 要求 execl的每一行&#xff0c;對應json中的每一個OId json 如下&#xff1a; {"List": [{"BatchNumber": "181-{{var}}",// "Bat…

【Python】dash-fastapi前后端搭建

概述 項目中需要快速搭建一個前后端系統&#xff0c;涉及到dash-fastapi架構的時候&#xff0c;對該架構的時候進行總結。本文主要總結的是對該架構的基本使用&#xff0c;后續再對該架構的項目源碼進行總結分析 此處實現一個小的demo&#xff0c;迷你任務管理器&#xff0c;…

IDEA中鏈接使用mysql數據庫

一、連接mysql 1. 打開idea&#xff0c;在右上角側邊欄有數據庫database插件&#xff0c;打開側邊欄點擊加號->數據源&#xff0c;可以看到支持很多數據庫&#xff0c;選擇mysql。 2. 首次使用需要下載驅動程序&#xff0c;不然連接數據庫會報錯。找到mysql&#xff0c;點擊…

程序編譯生成的文件

目錄 .i 文件 .s 文件 .o文件 總結 在 C 編程中&#xff0c;.i、.s和 .o 文件是編譯過程中生成的不同階段的文件&#xff0c;它們代表不同的含義&#xff1a; .i 文件 全稱 &#xff1a;預處理后的文件&#xff08;Intermediate File&#xff09;。 含義&#xff1a;.i文件…

[S32K]SPI

SpiShiftClockidleLevel: CLK空閑時電平(CPOL)&#xff1b; SpiDataShifrEdge:數據移位邊沿(CPHA)&#xff1b; SpiDataWidth: SpiTransferStart: MSB(高位起始)&#xff0c;LSB(低位起始)&#xff1b;&#xff1b; SpiHwUnit: 這是一個具體的硬件&#xff1f; SpiDataShiftE…

系統思考:客戶價值

“真正的市場競爭&#xff0c;不是比誰更能制造產品&#xff0c;而是比誰更能創造價值。” ——杰夫貝索斯 在組織輔導中&#xff0c;我經常問團隊一個問題&#xff1a;“我們的客戶是誰&#xff1f;”大多數人的第一反應是——“支付費用的就是客戶。” 這在過去的市場擴張階…

ArcGIS Pro 車牌分區數據處理與地圖制作全攻略

在大數據時代&#xff0c;地理信息系統&#xff08;GIS&#xff09;技術在各個領域都有著廣泛的應用&#xff0c;而 ArcGIS Pro 作為一款功能強大的 GIS 軟件&#xff0c;為數據處理和地圖制作提供了豐富的工具和便捷的操作流程。 車牌數據作為一種重要的地理空間數據&#xf…

OpenCV圖像加權函數:addWeighted

1 addWeighted函數 在OpenCV 里&#xff0c;addWeighted 函數的作用是對兩個圖像進行加權求和&#xff0c;常用于圖像融合、圖像過渡等場景。函數如下&#xff1a; cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 參數解釋 src1&#xff1a;第一個輸入圖…

Tcp網絡通信的基本流程梳理

先來一張經典的流程圖 接下介紹一下大概流程&#xff0c;各個函數的參數大家自己去了解加深一下印象 服務端流程 1.創建套接字&#xff1a;使用 socket 函數創建一個套接字&#xff0c;這個套接字后續會被用于監聽客戶端的連接請求。 需要注意的是&#xff0c;服務端一般有倆…

mysql學習-刪除數據(drop、truncate、delete)

1、概述 drop、truncate、delete都可以刪除mysql中的數據&#xff0c;但它們的作用范圍和操作方式有很大的不同。 2、詳細區別 2.1、drop 特點&#xff1a; 1、速度快 2、會刪除表數據&#xff0c;還會刪除表結構&#xff0c;包括與該表相關的所有數據&#xff0c;索引&…

編程自學指南:java程序設計開發,網絡編程基礎,TCP編程,UDP編程,HTTP客戶端開發

編程自學指南&#xff1a;java程序設計開發&#xff0c;網絡編程基礎 學習目標&#xff1a; 理解網絡協議&#xff08;TCP/IP、UDP&#xff09;的核心概念 掌握Socket編程實現客戶端與服務端通信 能夠通過多線程處理并發網絡請求 開發簡單的網絡應用&#xff08;如聊天程序…

leecode797.所有可能的路徑

深度優先搜索 class Solution { private:vector<vector<int>> result;vector<int> temp;void allPathsSourceTarget(vector<vector<int>> &graph,int v){if(vgraph.size()-1)result.push_back(temp);else{for(auto& adjVertex:graph[v]…