STM32實戰篇:閃燈 × 流水燈 × 蜂鳴器

IO引腳初始化

即開展某項活動之前所做的準備工作,對于一個IO引腳來說,在使用它之前必須要做一些參數配置(例如:選擇工作模式、速率)的工作(即IO引腳的初始化)。

IO引腳初始化流程

1、使能IO引腳端口的時鐘。(以PC13為例,需要先使能GPIOC這個端口的時鐘)

2、選擇模式和其他參數。(通過庫函數GPIO_Init(...)實現)


為什么要使能時鐘

對于時序電路來說,只有在外部時鐘(即使能時鐘)的激勵下才能工作。對于STM32來說,其芯片內部片上外設基本為時序電路,因此要想片上外設工作,就得給片上外設提供時鐘。

且在默認情況下,片上外設的時鐘都是關閉的。只有當我們要用到某個片上外設時,才會由編程者去開啟對應時鐘,這樣可以最大程度的省電。

以PC13為例,通過如下所示庫函數開啟時鐘:


程序代碼

閃燈

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main()
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//開啟GPIOA的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				//GPIO引腳,賦值為第0號引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOA的初始化 while(1){/*GPIO_ResetBits設置低電平,GPIO_SetBits設置高電平*/GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為低電平Delay_ms(500);										//延時500msGPIO_SetBits(GPIOA, GPIO_Pin_0);					//將PA0引腳設置為高電平Delay_ms(500);										//延時500ms}
}


流水燈

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//開啟GPIOA的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;				//GPIO引腳,賦值為所有引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOA的初始化/*主循環,循環體內的代碼會一直循環執行*/while (1){/*使用GPIO_Write,同時設置GPIOA所有引腳的高低電平,實現LED流水燈*/GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001,PA0引腳為低電平,其他引腳均為高電平,注意數據有按位取反Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010,PA1引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,PA2引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,PA3引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000,PA4引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000,PA5引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000,PA6引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100msGPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000,PA7引腳為低電平,其他引腳均為高電平Delay_ms(100);				//延時100ms}
}


蜂鳴器

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*開啟時鐘*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//開啟GPIOB的時鐘//使用各個外設前必須開啟時鐘,否則對外設的操作無效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定義結構體變量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,賦值為推挽輸出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				//GPIO引腳,賦值為第12號引腳GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,賦值為50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);					//將賦值后的構體變量傳遞給GPIO_Init函數//函數內部會自動根據結構體的參數配置相應寄存器//實現GPIOB的初始化/*主循環,循環體內的代碼會一直循環執行*/while (1){GPIO_ResetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為低電平,蜂鳴器鳴叫Delay_ms(100);							//延時100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為高電平,蜂鳴器停止Delay_ms(100);							//延時100msGPIO_ResetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為低電平,蜂鳴器鳴叫Delay_ms(100);							//延時100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//將PB12引腳設置為高電平,蜂鳴器停止Delay_ms(700);							//延時700ms}
}

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

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

相關文章

LED燈的呼吸功能

"呼吸功能"通常是指 LED 燈的一種工作模式,它模擬人類的呼吸節奏,即 LED 燈的亮度會周期性地逐漸增強然后逐漸減弱,給人一種 LED 在"呼吸"的感覺。這種效果通常用于指示設備的狀態或者簡單地作為裝飾效果。(就…

Spring Boot Security自定義AuthenticationProvider

以下是一個簡單的示例,展示如何使用AuthenticationProvider自定義身份驗證。首先,創建一個繼承自標準AuthenticationProvider的類,并實現authenticate方法。 import com.kamier.security.web.service.MyUser; import org.springframework.se…

【Adobe】Photoshop圖層的使用

Adobe Photoshop(簡稱PS)中的圖層是圖像處理中一個核心概念,它允許用戶以堆疊的方式組織圖像的不同部分,從而實現對圖像的復雜編輯和處理而不影響原始圖像。以下是關于Adobe Photoshop圖層的詳細介紹: 一、圖層的定義 圖層就像是透明的紙張,你可以在上面繪制、添加圖像…

YOLOv10改進 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余種損失函數

一、本文介紹 這篇文章介紹了YOLOv10的重大改進,特別是在損失函數方面的創新。它不僅包括了多種IoU損失函數的改進和變體,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,還融合了“Focus”思想,創造了一系列新的損失函數。這些組合形式的…

Android Init Language自學筆記

Android Init Language由五個元素組成:Acttions、Commands、Services、Options和Imports。 Actions和Services隱式聲明了一個新的section。所以的Commands和Options都屬于最近聲明的section。 Services具有唯一的名稱,如果重名會報錯。 Actions Acti…

解決Spring Boot中的高可用性設計

解決Spring Boot中的高可用性設計 大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 高可用性設計概述 1.1 什么是高可用性? 高可用性指系統在面對各種故障和異常情況時,仍…

獨立開發者系列(22)——API調試工具apifox的使用

接口的邏輯已經實現,需要對外發布接口,而發布接口的時候,我們需要能自己簡單調試接口。當然,其實自己也可以寫簡單的代碼調試自己的接口,因為其實就是簡單的request請求或者curl庫讀取,調整請求方式get或者…

如果MySQL出現 “Too many connections“ 錯誤,該如何解決?

當你想要連接MySQL時出現"Too many connections" 報錯的情況下,該如何解決才能如愿以償呢?都是哥們兒,就教你兩招吧! 1.不想重啟數據庫的情況下 你可以嘗試采取以下方法來解決: 增加連接數限制&#xff1a…

RxJava學習記錄

文章目錄 1. 總覽1.1 基本原理1.2 導入包和依賴 2. 操作符2.1 創建操作符2.2 轉換操作符2.3 組合操作符2.4 功能操作符 1. 總覽 1.1 基本原理 參考文獻 構建流:每一步操作都會生成一個新的Observable節點(沒錯,包括ObserveOn和SubscribeOn線程變換操作…

asp.netWebForm(.netFramework) CSRF漏洞

asp.netWebForm(.netFramework) CSRF漏洞 CSRF(Cross-Site Request Forgery)跨站請求偽造是一種常見的 Web 應用程序安全漏 洞,攻擊者通過誘使已認證用戶在受信任的網站上執行惡意操作,從而利用用戶的身份 執行未經授權的操作。攻…

echarts實現3D餅圖

先看下最終效果 實現思路 使用echarts-gl的曲面圖&#xff08;surface&#xff09;類型 通過parametric繪制曲面參數實現3D效果 代碼實現 <template><div id"surfacePie"></div> </template> <script setup>import {onMounted} fro…

簡單的找到自己需要的flutter ui 模板

簡單的找到自己需要的flutter ui 模板 網站 https://flutterawesome.com/ 簡介 我原本以為會很難用 實際上不錯 很簡單 打開后界面類似于,右上角可以搜索 點擊view github 相當簡單 很oks

RabbitMq,通過prefetchCount限制消費并發數

1.問題:項目瓶頸,通過rabbitMq來異步上傳圖片,由于并發上傳的圖片過多導致阿里OSS異常, 解決方法:通過prefetchCount限制圖片上傳OSS的并發數量 2.定義消費者 Component AllArgsConstructor Slf4j public class ReceiveFaceImageEvent {private final UPloadService uploadSe…

【見刊通知】MVIPIT 2023機器視覺、圖像處理與影像技術國際會議

MVIPIT 2023&#xff1a;https://ieeexplore.ieee.org/xpl/conhome/10578343/proceeding 入庫Ei數據庫需等20-50天左右 第二屆會議征稿啟動&#xff08;MVIPIT 2024&#xff09; The 2nd International Conference on Machine Vision, Image Processing & Imaging Techn…

MacOS和Windows中怎么安裝Redis

希望文章能給到你啟發和靈感&#xff5e; 如果覺得文章對你有幫助的話&#xff0c;點贊 關注 收藏 支持一下博主吧&#xff5e; 閱讀指南 開篇說明一、基礎環境說明1.1 硬件環境1.2 軟件環境 二、MacOS中Redis的安裝2.1 HomeBrew 安裝&#xff08;推薦&#xff09;2.2 通過官方…

70.WEB滲透測試-信息收集- WAF、框架組件識別(10)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a; 易錦網校會員專享課 上一個內容&#xff1a;69.WEB滲透測試-信息收集- WAF、框架組件識別&#xff08;9&#xff09; 關于waf相應的識…

arcgis js 4.x實現類似openalayers加載tilewms圖層效果

一、普通wms與tilewms區別 相同點&#xff1a;都是加載WMS服務。 不同點&#xff1a;TitleWMS會把當前可視窗口根據網格&#xff08;開發者可以在調用OpenLayers api的時候自定義&#xff09;切分&#xff0c;一片一片地返回回來&#xff0c;在前端進行整合。而ImageWMS則不會…

Springboot 配置 log4j 時的注意事項

感謝博主 https://www.cnblogs.com/fishlittle/p/17950944 依賴 SpringBoot 的 starter 自帶的是 logback 日志&#xff0c;若要使用 log4j2 日志&#xff0c;需要引入對應依賴。logback 日志和 log4j2 日志都是對 slf4j 門面的實現&#xff0c;只能存在一個&#xff0c;且必…

江協科技51單片機學習- p25 無源蜂鳴器

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黃桃罐頭&#xff0c;希望你看完之后&#xff0c;能對你有所幫助&#xff0c;不足請指正&#xff01;共同學習交流 &#x1f381;歡迎各位→點贊&#x1f44d; 收藏?? 留言&#x1f4dd;?…

環信IM實現小米、oppo推送詳細步驟

本文教大家集成環信IM后如何實現小米、oppo推送。 一、小米推送 步驟一、在小米開放平臺創建應用。 在 小米開放平臺 創建應用&#xff0c;開啟推送服務。詳見小米官方網站的 推送服務接入指南。 步驟二、上傳推送證書。 注冊完成后&#xff0c;需要在環信即時通訊云控制臺…