STM32-第一節-新建工程,GPIO,點亮LED,蜂鳴器

一、新建工程:

1.Keil中新建工程,選擇開發板型號。

2.工程文件夾建立Start,Library等分類,復制模版工程中的文件到工程文件夾中。

3.在Keil中添加分組,添加文件。

4.工程選項設置:

c/c++中:Include Paths內聲明所有包含頭文件的分類文件夾(Start,Library等)
? ? ? ? ? ? ? ? Define內定義USE_STDPERIPH_DRIVER

Debug中:下拉列表選擇對應調試器
? ? ? ? ? ? ? ? ? Settings - Flash Download里選擇Reset and Run。

5.在main.c文件中編程即可。

#include "stm32f10x.h" ? ? ? ? ? ? ? ? ?// Device headerint main
{return 0;
}

二、GPIO:

1.GPIO介紹:

通用輸入輸出口。可配置為8種模式。引腳電平 0 - 3.3V。

2.系統結構:

在stm32中,掛載在APB2總線上。

名稱按照GPIOA,GPIOB等命名。

每個GPIO有16個引腳,編號0-15,GPIOA_0一般稱作PA0。

3.幾種模式介紹:

(1)上拉/下拉輸入:不接輸入時默認輸入為高/低電平。

(2)模擬輸入:GPIO無效,引腳直接接入ADC模塊(即輸入為模擬信號)

(3)開漏輸出:輸出時高電平為高阻態,低電平為VSS。

(4)推挽輸出:輸出時高電平為VDD,低電平為VSS。

?4.函數介紹:

(1)將GPIO使能:

//介紹:APB2總線時鐘使能函數
//參數1:需要時鐘信號的外設,具體名稱可右鍵函數找到定義查看
//(此次為RCC_APB2Periph_GPIOA,因為要點亮PA0口的LED)
//參數2:ENABLE or DISABLE

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
?(2)GPIO設置參數結構體:

?? ?//介紹:GPIO設置參數結構體
?? ?//結構體成員:Mode設置模式,Pin目標引腳,Speed設置輸出速度
?? ?//Mode值:GPIO_Mode_AIN模擬輸入,GPIO_Mode_IPD下拉輸入,GPIO_Mode_IPU上拉輸入,
?? ?//? ? ? ? ? ? ? ? GPIO_Mode_Out_OD開漏輸出,GPIO_Mode_Out_PP推挽輸出
?? ?//Pin值:GPIO_Pin_0到GPIO_Pin_15,GPIO_Pin_All(激活多個端口,用按位或
? ? //Speed值:GPIO_Speed_50MHz(選這個就行)

GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
(3)告訴GPIO參數:

//介紹:GPIO初始化函數
//參數1:要設置的GPIO
//參數2:一個結構體,包含GPIO的設置參數

GPIO_Init(GPIOA, &GPIO_InitStructure);
(4)寫入目標引腳的值:?? ?

//介紹:設置GPIO引腳的值,set為置1,reset為置0
//參數:GPIOx,目標引腳

GPIO_SetBits(GPIOA,GPIO_Pin_13);
GPIO_ResetBits(GPIOA,GPIO_Pin_13);

?//參數:GPIOx,目標引腳,Bit_RESET或Bit_SET
?//參數:GPIOx,對應值,低位為PA0,高位為PA15

GPIO_WriteBit(GPIOA,GPIO_Pin_13,Bit_SET);
GPIO_Write(GPIOA,0x0001);

三、LED燈閃爍:

1.連線圖:

2.組合代碼:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1){GPIO_ResetBits(GPIOA, GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA, GPIO_Pin_0);Delay_ms(500);}
}

四、蜂鳴器:

注意:A15,B3,B4為調試端口,不要使用。

1.接線圖:

?

2.蜂鳴器介紹:

低電平響,高電平不響。代碼原理同上。

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

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

相關文章

Rust標量、復合類型與自定義類型、第三方并發結構

以下是 Rust 中標量類型、對象類型(含結構體、復合類型、堆分配類型)以及常用第三方并發數據結構的完整分類、示例和區別對比,幫助你系統掌握它們的本質異同: 🟢 一、標量類型(Scalar Types,存儲…

基于STM32溫濕度檢測—串口顯示

基于STM32溫濕度檢測 (仿真+程序) 功能介紹 具體功能: 1.使用DHT11檢測溫濕度; 2.單片機處理完控制LCD1602顯示溫濕度; 3.單片機也通過串口顯示檢測到的溫濕度; 添加圖片注釋,不…

Windows 10 查詢 Nginx 進程教程

1. 打開命令提示符(CMD) 按 Win R,輸入 cmd,回車。或者在開始菜單搜索欄輸入“cmd”,選擇“命令提示符”。 2. 查看是否有正在運行的 Nginx 進程 輸入命令: tasklist | findstr nginx這個命令會列出所有…

使用 Kafka 優化物流系統的實踐與思考

使用 Kafka 優化物流系統的實踐與思考 在現代物流系統中,訂單處理、倉儲管理、運輸調度等環節復雜且實時性要求高。為了滿足異步解耦、高吞吐、高可用、事件驅動和數據可靠性等需求,Kafka 作為分布式消息隊列和流處理平臺,成為了我們的首選。…

Rust中模式匹配let Some(gas_price) = tx.gas_price用法

你問得非常好,let Some(gas_price) tx.gas_price 是 Rust 中的一種模式匹配寫法,它用于從 Option 類型中提取值。 ? 背景知識:什么是 Option? 在 Rust 中,如果一個值可能存在也可能不存在,就會用 Option…

什么是LLM大語言模型

什么是LLM大語言模型 LLM的全稱是,Large Language Model,簡稱LLM,翻譯為大語言模型,其核心是模擬人類語言的復雜規律,實現語義理解、推理分析、文本生成等任務,主要目的是實現能讀懂和說出人類語言的模型。…

雜談-架構時代演進

關于未來 5-10 年軟件系統演化方向 1. 云原生 ? 超云原生(Post Cloud Native) Kubernetes 平臺自治化: K8s Operator 日益強大,逐步具備自愈、自動擴縮容、自動調優能力。 云廠商與企業私有云逐步融合為一體…

如何查看服務器的運行日志?

🟢 一、Linux服務器 Linux日志都在**/var/log**目錄下,最常用的有: 📂 常用日志文件 文件內容/var/log/messages大部分系統日志(CentOS常見)/var/log/syslog系統消息日志(Ubuntu/Debian常見&a…

在幸狐RV1106開發板上用gcc14.2本地編譯安裝postgresql 17.5數據庫

在幸狐RV1106開發板上用gcc14.2本地編譯安裝postgresql 17.5數據庫 編譯環境: RV1106G3 Linux luckfox-rv1106 5.10.160 #3 Fri Jun 27 14:16:20 AWST 2025 armv7l GNU/Linux BusyBox v1.36.1 gcc version 14.2.0 (GCC) GNU ld (GNU Binutils) 2.44 GNU Make 4.4 n…

Go語言中map[string]interface{} 和 map[string]string的區別

在 Go 語言中,map[string]interface{} 和 map[string]string 是兩種不同類型的 map,它們的主要區別在于值的類型以及這種差異帶來的使用場景和靈活性的不同。 1. 值的類型 map[string]interface{}:這里的 interface{} 表示 Go 中的空接口類型…

AdGuard Home 安裝及使用

AdGuard Home 是 AdGuard 開源的一個私人 DNS 服務端,只需在網關部署,即可實現全局域網的廣告攔截與隱私反追蹤。在 DNS 解析的過程中,匹配規則庫內的 URL 進行攔截,同時在客戶端中,還可以通過自定義過濾規則實現網頁 DOM 的攔截。 基于 Golang 編寫的 AdGuard Home,官方…

繞過 GraphQL 暴力破解保護

題目要求: 本實驗的用戶登錄機制由 GraphQL API 提供支持。API 終端節點有一個速率限制器,如果它在短時間內收到來自同一源的太多請求,則會返回錯誤。 要解決實驗問題,請暴力破解登錄機制以 .使用身份驗證實驗室密碼列表作為密碼…

C/C++ 使用rapidjson庫 操作Json格式文件(創建、插入、解析、修改、刪除)

目錄 一、前言 1.簡介 2.兼容性 3.下載 4.安裝 5.官方文檔 6.自述 二、封裝Json 1. 創建一個 Document 對象 2. "key":"value" 3. { } 4. [ ] 5. [ { }, { } ] 6. [ [ ], [ ] ] 7. { [ ], [ ] } 8. { { }, { } } 9. 將Document轉換為字符串…

免安裝一鍵修復網絡診斷 + 權限修復!打印機共享錯誤工具適配 Win7/10/11

各位打印小能手們!你們有沒有遇到過共享打印機出問題,搞得自己焦頭爛額的情況?比如系統一更新,打印機就連不上,打印任務失敗,真的是讓人崩潰啊!別慌,今天就給大家全面介紹一款打印機…

電腦分屏快捷鍵5

按window右箭頭: 按window左箭頭:

nt!CcFlushCache函數分析之nt!CcFindBcb

nt!CcFindBcb函數分析 第一部分: 1: kd> p nt!CcAcquireByteRangeForWrite0x377: 80a13c49 e866e4ffff call nt!CcFindBcb (80a120b4) 1: kd> t nt!CcFindBcb: 80a120b4 55 push ebp 1: kd> kc # 00 nt!CcFindBcb 01 nt!CcAcqu…

矩陣及矩陣快速冪

一.矩陣與模板 【模板】矩陣求和 時間限制:1秒 內存限制:128M 題目描述 給出兩個𝑛行𝑚列的矩陣,求兩個矩陣的和 輸入描述 第一行輸入兩個以空格分隔的整數𝑛,𝑚,表示矩…

rk3588獲取探維雷達數據

可以在上期部署完 FASTLIO 的工作空間內,繼續部署探維雷達的驅動程序。不要問為什么不用 mid360,因為我手上只有探維雷達。 探維雷達的驅動鏈接:https://github.com/TanwayLab/tanwaylidar_view/blob/main/README.md 下載驅動并編譯 因為沿…

HTML簡介,初步了解HTML

<html> <body> <h1>我的第一個標題</h1> <p1>我的第一個段落</p1> </body> </html> 什么是HTML HTML是用來描述網頁的一種語言。 HTML指的是超文本標記語言。 HTML不是一種編程語言&#xff0c;而是一種標記語言。 標記語…

ARM集群服務器 定義

ARM集群服務器的核心定義可歸納為以下要點&#xff1a; 一、核心定義 ARM集群服務器是將?多個基于ARM架構的處理器節點?集成在單一物理機箱內&#xff0c;通過高速網絡互聯形成的分布式計算系統。每個節點均具備獨立的計算單元&#xff08;如CPU、GPU/NPU&#xff09;、內存…