stm32的三種開發方式

以下是針對STM32F103RC實現LED閃爍(PC13引腳)的三種開發方式示例代碼,每種方式均保持相同的核心邏輯:

1. 寄存器開發方式(直接操作寄存器)

#include "stm32f10x.h"int main(void) {// 1. 開啟GPIOC時鐘 (APB2總線)RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;// 2. 配置PC13為推挽輸出模式 (50MHz)GPIOC->CRH &= ~(GPIO_CRH_MODE13 | GPIO_CRH_CNF13);  // 清除舊配置GPIOC->CRH |= GPIO_CRH_MODE13_0;  // 輸出模式, 50MHzwhile(1) {// 3. 點亮LED (PC13置低電平)GPIOC->BSRR = GPIO_BSRR_BR13;// 4. 簡單延時for(volatile uint32_t i = 0; i < 500000; i++);// 5. 熄滅LED (PC13置高電平)GPIOC->BSRR = GPIO_BSRR_BS13;// 6. 延時for(volatile uint32_t i = 0; i < 500000; i++);}
}

2. 標準庫開發方式(使用STM32F10x Standard Peripheral Library)

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"int main(void) {// 1. 初始化結構體GPIO_InitTypeDef GPIO_InitStruct;// 2. 開啟GPIOC時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);// 3. 配置PC13參數GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽輸出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 速度50MHzGPIO_Init(GPIOC, &GPIO_InitStruct);while(1) {// 4. 點亮LEDGPIO_ResetBits(GPIOC, GPIO_Pin_13);// 5. 延時for(volatile uint32_t i = 0; i < 500000; i++);// 6. 熄滅LEDGPIO_SetBits(GPIOC, GPIO_Pin_13);// 7. 延時for(volatile uint32_t i = 0; i < 500000; i++);}
}

3. HAL庫開發方式(使用STM32Cube HAL庫)

#include "stm32f1xx_hal.h"void SystemClock_Config(void);  // 時鐘配置聲明 (通常由CubeMX生成)int main(void) {HAL_Init();                 // 初始化HAL庫SystemClock_Config();       // 配置系統時鐘// 1. 初始化GPIOC__HAL_RCC_GPIOC_CLK_ENABLE();  // 使能GPIOC時鐘GPIO_InitTypeDef GPIO_InitStruct = {.Pin = GPIO_PIN_13,.Mode = GPIO_MODE_OUTPUT_PP,  // 推挽輸出.Pull = GPIO_NOPULL,.Speed = GPIO_SPEED_FREQ_HIGH // 高速模式};HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);while(1) {// 2. 翻轉LED狀態 (HAL自帶延時)HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);HAL_Delay(500);  // 使用HAL延時500ms}
}// 簡化的時鐘配置 (實際需根據板晶振修改)
void SystemClock_Config(void) {RCC_OscInitTypeDef osc = {0};RCC_ClkInitTypeDef clk = {0};osc.OscillatorType = RCC_OSCILLATORTYPE_HSE;osc.HSEState = RCC_HSE_ON;osc.PLL.PLLState = RCC_PLL_ON;osc.PLL.PLLSource = RCC_PLLSOURCE_HSE;osc.PLL.PLLMUL = RCC_PLL_MUL9;HAL_RCC_OscConfig(&osc);clk.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;clk.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;clk.AHBCLKDivider = RCC_SYSCLK_DIV1;clk.APB1CLKDivider = RCC_HCLK_DIV2;clk.APB2CLKDivider = RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&clk, FLASH_LATENCY_2);
}

關鍵差異總結:

特性寄存器開發標準庫開發HAL庫開發
代碼復雜度高(需直接操作寄存器)中(封裝硬件操作)低(高度抽象)
可移植性低(芯片依賴性強)中(同系列芯片可移植)高(跨系列兼容)
開發效率低(需查閱手冊)中(接口直觀)高(集成工具鏈支持)
資源占用極小(無庫開銷)中等(需鏈接庫文件)較大(庫文件體積大)
適用場景極致優化/資源受限項目傳統項目維護快速原型開發/復雜外設操作

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

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

相關文章

SpringBoot問卷調查系統設計與實現

概述 基于SpringBoot開發的問卷調查系統&#xff0c;該系統集成了問卷管理、題目管理等多種功能模塊。 主要內容 核心功能模塊&#xff1a; ??個人信息管理??&#xff1a; 修改密碼個人信息修改 ??問卷管理??&#xff1a; 問卷新增問卷修改問卷刪除 ??題目管理?…

Linux進程管理:從基礎到實戰

在 Linux 系統編程中&#xff0c;進程&#xff08;Process&#xff09; 是操作系統進行資源分配和調度的基本單位。理解進程的概念是掌握系統編程、多任務處理、并發編程的基礎。 目錄 一、什么是進程&#xff1f; 定義&#xff1a; 二、進程的生命周期 示例&#xff1a;查…

工業物聯網中的 Modbus:傳感器與網關通信實戰(二)

四、實戰案例解析 4.1 項目背景與目標 某智能工廠致力于提升生產過程的自動化和智能化水平&#xff0c;對生產線上的各種設備進行實時監控和數據分析。在該工廠的一個生產車間中&#xff0c;存在著大量的傳感器&#xff0c;用于監測設備的運行狀態、環境參數等信息。這些傳感…

飛算 JavaAI 智控引擎:全鏈路開發自動化新圖景

免責聲明: 此文章的所有內容皆是本人實驗測評&#xff0c;并非廣告推廣&#xff0c;并非抄襲。如有侵權&#xff0c;請聯系&#xff0c;謝謝! 文章目錄&#x1f4dd;前言一、飛算 Java AI 智能開發助手簡介1.1何為飛算 Java AI智能助手&#xff1f;2.2 飛算Java AI 直擊開發全場…

MYSQL數據庫(九)MVCC-多版本并發控制

目錄 一 前景導入 1 當前讀 2 快照讀 二 MVCC 1 隱藏字段 2 UndoLog 回滾日志 (1 UndoLog日志 (2 UndoLog版本鏈 3 Read View 面試八股 介紹一下MVCC 一 前景導入 1 當前讀 可使當前事務讀取的是最新版本的數據&#xff0c;讀取時還要保證其他并發事務不能修改當中…

[Pytest] [Part 2]增加 log功能

開始實現需求之前先做個log類&#xff0c;可以給其他模塊使用&#xff0c;也方便以后修改log類的功能和屬性。 使用的是python中的logging包來進行簡單的封裝&#xff0c;具體代碼如下 import logging import sysclass TefLogger:def __init__(self, logger_nameTEST_FRAMEWOR…

NeighborGeo:基于鄰居的IP地理定位(三)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 3. NeighborGeo 本文提出NeighborGeo,利用圖結構學習和有監督對比學習來建立可靠的地標-目標關…

python使用fastmcp包編寫mcp服務端(mcp_server)和mcp客戶端(mcp_client)

安裝fastmcp pip install fastmcp編寫mcp服務端代碼 from fastmcp import FastMCP mcp FastMCP(weather)mcp.tool() def get_weather(city: str):獲取對應城市的天氣:param city: 目標城市:return: 該城市的天氣return f"{city}天氣晴朗&#xff0c;溫度60度&#xff01…

(1)機器學習小白入門 YOLOv:從概念到實踐

(1)機器學習小白入門YOLOv &#xff1a;從概念到實踐 (2)機器學習小白入門 YOLOv&#xff1a;從模塊優化到工程部署 (3)機器學習小白入門 YOLOv&#xff1a; 解鎖圖片分類新技能 目標檢測一直是一個機器學習的一個重要的應用方向。而 YOLOv&#xff08;You Only Look Once&…

Appium 簡介

Appium 是一個開源的移動應用自動化測試框架&#xff0c;用于測試原生應用(native)、混合應用(hybrid)和移動網頁應用(mobile web)。它支持 iOS、Android 和 Windows 平臺。 https://www.bilibili.com/video/BV1R93szkEhi/? App自動化測試&#xff1a;App測試AppiumUiAutomato…

【C語言刷題】第十一天:加量加餐繼續,代碼題訓練,融會貫通IO模式

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為…

免費版安全性縮水?ToDesk、TeamViewer、向日葵、網易UU遠程訪問隱私防護測評

一、前言 在這個居家辦公、遠程技術支持成為常態的時代&#xff0c;我們經常需要把電腦控制權交給遠方的同事或技術人員。但你想過沒有&#xff0c;那些免費遠程控制軟件&#xff0c;真的能保護好你的隱私嗎&#xff1f; 好用的遠程軟件通常會收費運營&#xff0c;投入經費去開…

nginx部署發布Vite項目

1 引言 在之前的文章《Ubuntu云服務器上部署發布Vite項目》中筆者使用了Vite提供的預覽服務(npm run preview)來在云服務器上發布Web應用。這樣做輕量應用是沒問題的&#xff0c;不過遇到一些專業的問題就不行了&#xff0c;最好還是使用專業的HTTP服務器。除此之外&#xff0…

Unity文件夾標簽 —— FolderTag

GitHub地址 FolderTag 下載之后解壓&#xff0c;將FolderTag文件夾拖進Unity項目的Assets文件夾 選中文件夾&#xff0c;填上標簽

【0基礎開發油猴腳本】某漫畫網站圖片旋轉

有朋友在用某漫畫網站在線看漫畫&#xff0c;但是那個網站會把漫畫圖片右旋90度&#xff0c;如圖。于是&#xff0c;他就像我發起了求助&#xff0c;問我能不能寫個腳本。我說&#xff0c;AI都發展到2025了&#xff0c;前端&#xff08;腳本&#xff09;這種東西還用自己寫嗎&a…

Vue Router 中,params參數的名稱必須與路由配置中的動態路徑參數名完全一致

路由配置與 params 參數的綁定關系 在路由配置中&#xff0c;使用 冒號&#xff08;:&#xff09; 定義動態路徑參數&#xff1a; // router.js&#xff08;路由配置&#xff09; { path: /search/:keyword, // 這里的:keyword是動態路徑參數 name: Search, component: S…

Spring Boot 應用開發實戰指南:從入門到實戰(內含實用技巧+項目案例)

&#x1f4d8; Spring Boot 應用開發實戰指南&#xff1a;從入門到實戰&#xff08;內含實用技巧項目案例&#xff09;&#x1f680; 你是否還在為 Spring 配置復雜、開發效率低下而苦惱&#xff1f;Spring Boot 早已成為 Java 后端開發的“標配”&#xff0c;本篇文章將帶你全…

【NLP入門系列五】中文文本分類案例

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 博主簡介&#xff1a;努力學習的22級本科生一枚 &#x1f31f;?&#xff1b;探索AI算法&#xff0c;C&#xff0c;go語言的世界&#xff1b;在迷茫中尋找光芒…

【微信小程序】- 監聽全局globalData數據

【微信小程序】- 監聽全局globalData數據 數據劫持&#xff08;Object.defineProperty&#xff09;實現適用場景 數據劫持&#xff08;Object.defineProperty&#xff09; 實現 通過攔截 globalData 的屬性讀寫實現自動監聽&#xff0c;適合精確監聽特定變量。 ?實現步驟?&…

高速公路閑置土地資源化利用:廣西浦北互通3MW分布式光伏監控實踐

摘要&#xff1a; 分布式光伏項目在清潔能源轉型中扮演重要角色&#xff0c;其創新的空間利用模式有助于緩解能源開發與土地資源間的矛盾。廣西大唐至浦北高速公路&#xff08;浦北互通&#xff09;項目&#xff0c;利用高速公路沿線閑置空地建設光伏電站&#xff0c;發揮了分布…