03、GPIO外設(三):標準庫代碼示例

標準庫代碼示例

  • 1、點亮LED
  • 2、LED閃爍
  • 3、LED流水燈
  • 4、按鍵控制LED
  • 5、蜂鳴器

本章源代碼鏈接:

鏈接: link

1、點亮LED

實驗要求:點亮LED
在這里插入圖片描述

①LED.c文件的代碼如下:

#include "LED.h"/*** LED引腳初始化*//* 定義數組,想要添加引腳向里面添加即可 */
uint16_t GPIO_A[] = {PA0,PA1,PA2,PA3};
static uint8_t GPIONum = sizeof(GPIO_A)/sizeof(GPIO_A[0]);
void LED_Init(void)
{/* 1、開啟GPIOA的時鐘 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);/* 2、對引腳工作模式進行配置:通用推挽輸出 */GPIO_InitTypeDef GPIO_InitStruct;for(uint8_t i = 0; i < GPIONum; i++){GPIO_InitStruct.GPIO_Pin = GPIO_A[i];GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOA, &GPIO_InitStruct);}
}/*** 點亮LED* PAx:PA0~PA3*/
void LED_ON(uint16_t PAx)
{/* 點亮LED,引腳輸出高電平 */GPIO_SetBits(GPIOA, PAx);
}/*** 熄滅LED* PAx:PA0~PA3*/
void LED_OFF(uint16_t PAx)
{/* 熄滅LED,引腳輸出低電平 */GPIO_ResetBits(GPIOA, PAx);
}/*** 翻轉LED* PAx:PA0~PA3*/
void LED_Turn(uint16_t PAx)
{/* 如果LED是點亮 */if(GPIO_ReadOutputDataBit(GPIOA, PAx))//輸出引腳為高電平{/* 熄滅LED */LED_OFF(PAx);}else{/* 否則點亮LED */LED_ON(PAx);}
}

②LED.h文件的代碼如下:

#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"   #define PA0 GPIO_Pin_0
#define PA1 GPIO_Pin_1
#define PA2 GPIO_Pin_2
#define PA3 GPIO_Pin_3void LED_Init(void);
void LED_ON(uint16_t PAx);
void LED_OFF(uint16_t PAx);
void LED_Turn(uint16_t PAx);#endif

③Delay.c文件的代碼如下:(定時器章節進行講解)

#include "Delay.h" /** 延遲函數us*/
void Delay_us(uint16_t us)
{// 設置 SysTick 的計數周期SysTick_Config(SystemCoreClock/1000000); // 每周期 1us// 關閉 SysTick 的中斷,不可省略SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;// 開始計數for(uint32_t i=0; i<us; i++){   // 循環一次就是 1uswhile( !((SysTick->CTRL)&(1<<16)) );}// 關閉 SysTick 定時器SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}/** 延遲函數ms*/
void Delay_ms(uint16_t ms)
{while (ms--){Delay_us(1000);}
}/** 延遲函數s*/
void Delay_s(uint16_t s)
{while (s--){Delay_ms(1000);}
}

④Delay.h文件的代碼如下:

#ifndef __Delay_h
#define __Delay_h
#include "stm32f10x.h"// Device headervoid Delay_us(uint16_t us);
void Delay_ms(uint16_t ms);
void Delay_s(uint16_t s);#endif

⑤main.c文件的代碼如下:

#include "LED.h"int main(void)
{LED_Init();LED_ON(PA0);while(1) {}
}

2、LED閃爍

實驗要求:LED每隔1s亮滅
在這里插入圖片描述

⑤main.c文件的代碼如下:

#include "LED.h"
#include "Delay.h"int main(void)
{LED_Init();while(1) {LED_ON(PA0);Delay_ms(500);LED_OFF(PA0);Delay_ms(500);}
}

3、LED流水燈

在這里插入圖片描述
⑤main.c文件的代碼如下:

#include "LED.h"
#include "Delay.h"extern uint16_t GPIO_A[];
int main(void)
{LED_Init();while(1) {for(uint8_t i = 0; i < 4; i++){LED_ON(GPIO_A[i]);           //點亮LED_OFF(GPIO_A[(i+3)%4]);    //熄滅Delay_ms(500);}}
}	

4、按鍵控制LED

在這里插入圖片描述

①Key.c文件的代碼如下:

#include "Key.h"/*** Key1引腳PB0的初始化*/
void Key_Init(void)
{/* 1、開啟GPIOB的時鐘 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);/* 2、對引腳工作模式進行配置:上拉輸入模式 */GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOB, &GPIO_InitStruct);
}/*** 檢測按鍵是否按下*/
uint8_t Key_Num(void)
{uint8_t num = 0;if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))           //如果按鍵按下{Delay_ms(10);                                       //延時消抖if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0))       //按鍵真的按下{while(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0));  //等待按鍵松開Delay_ms(10);                                      //延時消抖num = 1;}}return num;
}

②Key.h文件的代碼如下:

#ifndef __Key_H
#define __Key_H
#include "stm32f10x.h"   
#include "Delay.h"void Key_Init(void);
uint8_t Key_Num(void);#endif

③main.c文件的代碼如下:

#include "LED.h"
#include "Key.h"int main(void)
{LED_Init(PA0);Key_Init();while(1){if(Key_Num() == 1){LED_Turn(PA0);}}
}

5、蜂鳴器

在這里插入圖片描述

😀蜂鳴器模塊的IO引腳輸入低電平時,蜂鳴器響;IO引腳輸入高電平時,蜂鳴器不響。
圖蜂鳴器IO連接著單片機的PC1引腳,PC1輸出低電平,蜂鳴器響,輸出高電平,蜂鳴器不響

①Buzzer.c文件的代碼如下:

#include "Buzzer.h"/*** 蜂鳴器引腳的初始化*/
void Buzzer_Init(void)
{/* 1、開啟GPIOC的時鐘 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);/* 2、對引腳工作模式進行配置:通用推挽輸出 */GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOC,&GPIO_InitStruct);
}/*** 蜂鳴器響*/
void Buzzer_ON(void)
{/* PC1輸出低電平 */GPIO_ResetBits(GPIOC, GPIO_Pin_1);
}/*** 蜂鳴器不響*/
void Buzzer_OFF(void)
{/* PC1輸出高電平 */GPIO_SetBits(GPIOC, GPIO_Pin_1);
}

②Buzzer.h文件的代碼如下:

#ifndef __Buzzer_H
#define __Buzzer_H
#include "stm32f10x.h"   void Buzzer_Init(void);
void Buzzer_ON(void);
void Buzzer_OFF(void);#endif

③main.c文件的代碼如下:

#include "Buzzer.h"
#include "Delay.h"int main(void)
{Buzzer_Init();while(1){Buzzer_ON();    //響Delay_ms(200);Buzzer_OFF();   //不響Delay_ms(200);}
}

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

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

相關文章

卷積神經網絡(CNN)與VGG16在圖像識別中的實驗設計與思路

卷積神經網絡&#xff08;CNN&#xff09;與VGG16在圖像識別中的實驗設計與思路 以下從基礎原理、VGG16架構解析、實驗設計步驟三個層面展開說明&#xff0c;結合代碼示例與關鍵參數設置&#xff0c;幫助理解其應用邏輯。 一、CNN與VGG16的核心差異 基礎CNN結構 通常包含33~55個…

java導出word含表格并且帶圖片

背景 我們需要通過 Java 動態導出 Word 文檔&#xff0c;基于預定義的 模板文件&#xff08;如 .docx 格式&#xff09;。模板中包含 表格&#xff0c;程序需要完成以下操作&#xff1a; 替換模板中的文本&#xff08;如占位符 ${設備類型} 等&#xff09;。 替換模板中的圖…

Oracle19C低版本一天遭遇兩BUG(ORA-04031/ORA-600)

昨天幫朋友看一個系統異常卡頓的案例&#xff0c;在這里分享給大家 環境&#xff1a;Exadata X8M 數據庫版本19.11 1.系統報錯信息 表象為系統卡頓&#xff0c;頁面無法刷出&#xff0c;登陸到主機上看到節點1 系統等待存在大量的 cursor: pin S wait on X等待 查看兩個節…

2025年Q1數據安全政策、規范、標準以及報告匯總共92份(附下載)

一、政策演進趨勢分析 &#xff08;一&#xff09;國家級政策新動向 數據要素市場建設 數據流通安全治理方案&#xff08;重點解析數據確權與交易規則&#xff09; 公共數據授權運營規范&#xff08;創新性提出分級授權機制&#xff09; 新興技術安全規范 人工智能安全標準…

ERR_PNPM_DLX_NO_BIN No binaries found in tailwindcss

場景復現&#xff1a; 最近在vue3項目中安裝了tailwindcss&#xff0c;但是它默認幫我安裝的版本是4XX的&#xff0c;導致我執行 npx tailwindcss init -p報錯了。 解決方案&#xff1a; 更改tailwindcss的版本為3 pnpm add -D tailwindcss3再次執行生成tailwindcss的初始…

第 4 篇:Motion 拖拽與手勢動畫(交互篇)—— 打造直覺化交互體驗

Framer Motion 的拖拽與手勢系統讓實現復雜交互變得異常簡單。本文將深入解析核心 API&#xff0c;并通過實戰案例演示如何創造自然流暢的交互體驗。 &#x1f9f2; 拖拽動畫基礎 1. 啟用拖拽 使用 drag 屬性即可開啟拖拽能力。支持的值有&#xff1a;true&#xff08;全方向…

CF148D Bag of mice

題目傳送門 思路 狀態設計 設 d p i , j dp_{i, j} dpi,j? 表示袋中有 i i i 個白鼠和 j j j 個黑鼠時&#xff0c; A A A 能贏的概率。 狀態轉移 現在考慮抓鼠情況&#xff1a; A A A 抓到白鼠&#xff1a;直接判 A A A 贏&#xff0c;概率是 i i j \frac{i}{i j}…

BT1120 BT656驅動相關代碼示例

前些年做視頻輸出項目的時候用過bt1120 tx與rx模塊&#xff0c;現將部分代碼進行記錄整理。代碼功能正常&#xff0c;可正常應用。 1. rx部分&#xff1a; /****************************************************************************** Copyright (C) 2021,All rights …

服務器簡介(含硬件外觀接口介紹)

服務器&#xff08;Server&#xff09;是指提供資源、服務、數據或應用程序的計算機系統或設備。它通常比普通的個人計算機更強大、更可靠&#xff0c;能夠長時間無間斷運行&#xff0c;支持多個用戶或客戶端的請求。簡單來說&#xff0c;服務器就是專門用來存儲、管理和提供數…

SQL-exists和in核心區別?、 性能對比?、適用場景?

EXISTS和IN的基本區別。IN用于檢查某個值是否在子查詢返回的結果集中,而EXISTS用于檢查子 查詢是否至少返回了一行數據。通常來說,EXISTS在子查詢結果集較大時表現更好,因為一旦找 到匹配項就會停止搜索,而IN則需要遍歷整個結果集。 在 SQL 中,EXISTS 和 IN 都可以用于…

煥活身心,解鎖健康養生新方式

健康養生是一門科學&#xff0c;更是一種生活智慧。從日常點滴做起&#xff0c;才能筑牢健康根基。? 飲食上&#xff0c;應遵循 “食物多樣&#xff0c;谷類為主” 原則。多攝入新鮮蔬果&#xff0c;它們富含維生素與膳食纖維&#xff0c;有助于增強免疫力&#xff1b;選擇全…

QT+Cmake+mingw32-make編譯64位的zlib-1.3.1源碼成功過程

由于開源的軟件zlib庫是很多相關庫libpng等基礎庫&#xff0c;因此掌握使用mingw編譯器來編譯zlib源碼的步驟十分重要。本文主要是通過圖文模式講解完整的qtcmakezlib源碼搭建和測試過程&#xff0c;為后續的其他源碼編譯環境搭建做基礎準備。 詳細步驟如下&#xff1a; 1、下…

健身會員管理系統(ssh+jsp+mysql8.x)含運行文檔

健身會員管理系統(sshjspmysql8.x) 對健身房的健身器材、會員、教練、辦卡、會員健身情況進行管理&#xff0c;可根據會員號或器材進行搜索&#xff0c;查看會員健身情況或器材使用情況。

【langchain4j】Springboot如何接入大模型以及實戰開發-AI問答助手(一)

langchain4j介紹 官網地址&#xff1a;https://docs.langchain4j.dev/get-started langchain4j可以說是java和spring的關系&#xff0c;spring讓我們開發java應用非常簡單&#xff0c;那么langchain4j對應的就是java開發ai的 “Spring” 他集成了AI應用的多種場景&#xff0c…

平均池化(Average Pooling)

1. 定義與作用?? ??平均池化??是一種下采樣操作&#xff0c;通過對輸入區域的數值取??平均值??來壓縮數據空間維度。其核心作用包括&#xff1a; ??降低計算量??&#xff1a;減少特征圖尺寸&#xff0c;提升模型效率。??保留整體特征??&#xff1a;平滑局部…

【dify實戰】chatflow結合deepseek實現基于自然語言的數據庫問答、Echarts可視化展示、Excel報表下載

dify結合deepseek實現基于自然語言的數據庫問答、Echarts可視化展示、Excel報表下載 觀看視頻&#xff0c;您將學會 在dify下如何快速的構建一個chatflow&#xff0c;來完成數據分析工作&#xff1b;如何在AI的回復中展示可視化的圖表&#xff1b;如何在AI 的回復中加入Excel報…

加一:從簡單問題到復雜邊界的深度思考

加一&#xff1a;從簡單問題到復雜邊界的深度思考 引言 在算法世界里&#xff0c;有些問題看似簡單&#xff0c;實則暗藏玄機&#xff0c;其中“加一”問題就是一個典型例子。所謂“加一”&#xff0c;通常指的是給一個由數字組成的數組表示的整數加一&#xff0c;這聽起來簡…

PointCore——利用局部全局特征的高效無監督點云異常檢測器論文與算法解讀

概述 三維點云異常檢測旨在從訓練集中檢測出異常數據點&#xff0c;是工業檢測、自動駕駛等眾多應用的基礎。然而&#xff0c;現有的點云異常檢測方法通常采用多個特征存儲庫來充分保留局部和全局特征表示&#xff0c;這帶來了高昂的計算成本以及特征之間的不匹配問題。為解決…

桌面應用UI開發方案

一、基于 Web 技術的跨平臺方案 Electron Python/Go 特點&#xff1a; 技術棧&#xff1a;前端使用 HTML/CSS/JS&#xff0c;后端通過 Node.js 集成 Python/Go 模塊或服務。 跨平臺&#xff1a;支持 Windows、macOS、Linux 桌面端&#xff0c;適合開發桌面應用。 生態成熟&…

redis 配置日志和數據存儲位置

Redis配置日志和數據存儲位置 介紹 Redis是一個開源的高性能鍵值存儲數據庫&#xff0c;常用于緩存、消息隊列和實時分析等場景。在使用Redis時&#xff0c;我們需要配置日志和數據存儲位置&#xff0c;以便更好地管理和監控Redis的運行狀態。本文將介紹如何配置Redis的日志和數…