嵌入式開發之STM32學習筆記day06

基于STM32F103C8T6的開發實踐——從入門到精通01

1. 引言

????????STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器,廣泛應用于嵌入式系統中。STM32F103C8T6是其中非常受歡迎的一款,憑借其強大的性能、豐富的外設接口和低廉的價格,成為了開發者的首選之一。本文將通過實例,詳細介紹如何基于STM32F103C8T6進行開發,并帶領讀者完成從簡單的點亮LED到復雜外設控制的過程。

2. STM32F103C8T6概述

????????STM32F103C8T6屬于STM32F1系列,核心采用ARM Cortex-M3架構,工作頻率最高可達72MHz,具有64KB的Flash存儲器和20KB的RAM,支持豐富的外設接口,如USART、SPI、I2C、PWM、ADC等。其廣泛應用于傳感器數據采集、通信模塊、工業控制等領域。

2.1 STM32F103C8T6的主要特點
  • 32位ARM Cortex-M3內核
  • 最高主頻72MHz
  • 64KB Flash和20KB SRAM
  • 豐富的外設接口:USART、I2C、SPI、CAN、PWM、ADC等
  • 內置8通道12位分辨率的ADC
  • 低功耗設計,支持多種休眠模式
2.2 常見應用場景
  • 工業控制
  • 無線通信
  • 智能家居
  • 機器人控制
  • 數據采集與處理

3. 開發環境搭建

????????為了開始STM32F103C8T6的開發,我們需要配置開發環境。這里推薦使用Keil uVision 5和STM32CubeMX這兩個工具。Keil uVision 5是一款功能強大的嵌入式開發集成環境,而STM32CubeMX則可以幫助我們簡化STM32的初始化代碼配置。

3.1 安裝Keil uVision 5

  1. 從Keil官網(https://www.keil.com)下載并安裝Keil uVision 5。
  2. 配置好項目的目標微控制器為STM32F103C8T6。
  3. 安裝相應的編譯工具鏈和調試工具。
3.2 安裝STM32CubeMX
  1. 從ST官方(https://www.st.com)下載并安裝STM32CubeMX。
  2. 打開STM32CubeMX,選擇目標芯片STM32F103C8T6,配置所需的外設。
  3. 生成初始化代碼,導入到Keil中進行開發。
3.3 配置調試工具
  1. 使用ST-Link v2調試器進行程序下載和調試。
  2. 連接ST-Link調試器到STM32F103C8T6的SWD接口。

4. STM32F103C8T6開發實踐

4.1 點亮LED:基礎GPIO操作

????????GPIO(General Purpose Input/Output)是STM32F103C8T6中最常見的外設之一。我們可以通過配置GPIO來控制LED燈的點亮與熄滅。

4.1.1 硬件連接
  1. 將一個LED與適當的電阻串聯,連接到STM32的PA5引腳。
  2. 將另一端接地。
4.1.2 軟件代碼

????????通過STM32CubeMX生成初始化代碼,配置PA5為輸出模式,然后編寫代碼使LED閃爍。

#include "stm32f10x.h"void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 開啟GPIOA的時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  // 配置PA5引腳GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 配置為推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 配置為50MHz速度GPIO_Init(GPIOA, &GPIO_InitStructure);  // 初始化PA5
}void delay(uint32_t count)
{while(count--);
}int main(void)
{GPIO_Configuration();  // 配置GPIOwhile(1){GPIO_SetBits(GPIOA, GPIO_Pin_5);  // 點亮LEDdelay(500000);  // 延時GPIO_ResetBits(GPIOA, GPIO_Pin_5);  // 熄滅LEDdelay(500000);  // 延時}
}
4.1.3 解釋
  • 通過GPIO_Init函數配置PA5為推挽輸出模式。
  • GPIO_SetBitsGPIO_ResetBits分別用于控制PA5輸出高電平和低電平。
  • delay函數用來控制LED閃爍的頻率。
4.2 外部中斷:按鍵控制LED

????????在嵌入式系統中,外部中斷是非常常見的一種功能。通過外部中斷,我們可以實現按鍵控制LED的功能。

4.2.1 硬件連接
  1. 按鍵與PA0引腳連接。
  2. LED與PA5引腳連接。
4.2.2 軟件代碼
#include "stm32f10x.h"void GPIO_Configuration(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  // 開啟GPIOA時鐘GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  // 配置PA5為LEDGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 配置為推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 配置PA0為按鍵輸入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  // 上拉輸入GPIO_Init(GPIOA, &GPIO_InitStructure);
}void EXTI0_IRQHandler(void)
{if (EXTI_GetITStatus(EXTI_Line0) != RESET)  // 判斷是否是PA0引腳的中斷{GPIOA->ODR ^= GPIO_Pin_5;  // 切換LED狀態EXTI_ClearITPendingBit(EXTI_Line0);  // 清除中斷標志}
}int main(void)
{GPIO_Configuration();// 配置外部中斷EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);while(1);
}
4.2.3 解釋
  • 使用PA0引腳作為按鍵輸入,并配置為上拉模式。
  • 通過外部中斷將PA0的狀態變化(按下按鍵)作為觸發條件,改變LED的狀態。
  • EXTI_Init函數配置外部中斷,EXTI0_IRQHandler函數處理按鍵中斷。

5. 高級功能

5.1 UART通信:串口調試與數據傳輸

????????STM32F103C8T6支持USART功能,通過串口可以與PC或其他設備進行通信。

5.2 ADC與傳感器數據采集

????????STM32內置12位的ADC,可用于采集模擬信號,比如溫度傳感器的數據。

6. 總結

????????本文介紹了基于STM32F103C8T6的開發實踐,從基礎的GPIO操作到外部中斷、串口通信等高級功能的實現。通過這些實例,開發者可以快速上手STM32,并應用于各種嵌入式項目中。STM32F103C8T6憑借其高性能、低功耗和豐富的外設,依然是開發者在嵌入式開發中的首選。

7. 預告

????????大家好!我是小程同學>o<,下一節我將為大家詳細介紹并解釋GPIO(通用輸入輸出)在STM32中的應用。GPIO是嵌入式開發中的基礎外設,但它卻在實際項目中起著至關重要的作用。無論是控制LED的點亮、讀取傳感器的數據,還是與外部設備進行通信,GPIO都能幫助我們實現各種功能。敬請期待,我將帶你一起深入了解GPIO的配置、操作技巧以及在開發中的最佳實踐!下節見!

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

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

相關文章

學習使用 Git 和 GitHub 開發項目的教程推薦

Git 和 GitHub 是現代軟件開發中不可或缺的工具&#xff0c;無論你是個人開發者還是團隊成員&#xff0c;掌握它們都能極大提升效率。本文精選了一系列優質教程資源&#xff0c;涵蓋從基本 Git 命令到進階多人協作的內容。這些教程既有文字形式&#xff0c;也有視頻或交互式資源…

golang中的接口

1.簡介 在go中的接口是以一種類型,一種抽象的類型。接口(interface)是一組函數method的集合,go中的接口不能包含任何變量。在go中接口中的所有方法都沒有方法體,接口定義了一個對象的行為規范,只定義規范不實現。接口體現了程序的多態和高內聚低耦合的思想。go中的接口也是…

AI 浪潮下,職場的變與不變

如今&#xff0c;AI 如迅猛颶風&#xff0c;極速席卷職場&#xff0c;徹底攪亂了原有的秩序。你是否留意到&#xff0c;身邊的工作方式正悄然生變&#xff1f;今天&#xff0c;【探星 AI 研習社】就為大家深入剖析&#xff0c;AI 如何改寫職場劇本。無論你是大學生還是職場資深…

匯川EASY系列之以太網通訊(MODBUS_TCP做主站)

匯川Easy系列以太網通訊中(MODBUSTCP,plc做主站),終于可以不用使用指令就可以完成了,全程通過簡單的配置就可通訊。本文將通過EASY系列PLC與調試助手之間完成此操作。具體演示如下; 關于主站和從站的介紹 A/請求:即主動方 向被動方發送的一個要求的信息。 B/主站:發…

npm error gyp info

在使用 npm 安裝 Node.js 包時&#xff0c;可能會遇到各種錯誤&#xff0c;其中 gyp 錯誤是比較常見的一種。gyp 是 Node.js 的一個工具&#xff0c;用于編譯 C 代碼。這些錯誤通常發生在需要編譯原生模塊的 npm 包時。下面是一些常見的原因和解決方法&#xff1a; 常見原因及…

Oracle 19C分區表索引小結

一、大佬說&#xff08;楊廷琨&#xff09; LOCAL索引的最大好處是在進行分區操作&#xff0c;比如TRUNCATE PARTITION, DROP PARTITION時&#xff0c;不會出現索引INVALID的情況&#xff0c;不影響索引的可用性。由于GLOBAL索引所有的數據存儲在一起&#xff0c;因此當執行分…

AutoHub場景演示|帶您領略智能自動化操作的全新體驗

AutoHub是一款由OpenCSG推出的基于前沿大型語言模型&#xff08;LLM&#xff09;的瀏覽器自動化工具&#xff0c;旨在通過智能對話交互和自動化技術&#xff0c;幫助用戶更高效地瀏覽網頁和完成任務。它不僅能夠自動化繁瑣的網頁操作&#xff0c;還能夠為用戶提供精準的信息檢索…

深入解析 Linux 聲卡驅動:從架構到實戰

在嵌入式 Linux 設備中&#xff0c;音頻功能的實現離不開 Linux 聲卡驅動。而 ALSA (Advanced Linux Sound Architecture) 作為 Linux 內核的音頻框架&#xff0c;提供了一整套 API 和驅動模型&#xff0c;幫助開發者快速集成音頻功能。本篇文章以 WM8960 音頻編解碼器&#xf…

thinkphp5模型查詢數據庫,查出來的字段直接修改成另外的名字

在ThinkPHP5中,如果你希望在查詢數據庫時將返回的字段名直接修改為其他名稱,可以通過以下幾種方式實現: 方法1:使用 field 方法指定字段別名 在查詢時通過 field 方法直接為字段指定別名(使用 AS 關鍵字)。 示例代碼: // 使用Db類查詢 $result = Db::name(user)->…

關于前端指令

在前端開發中&#xff0c;指令&#xff08;Directives&#xff09;通常指在框架中使用的一種特殊的語法或機制&#xff0c;用于擴展 HTML 的功能。常見的指令主要存在于前端框架中&#xff0c;如 Vue.js、Angular 等。下面我們將分別介紹 Vue.js 和 Angular 中的常用指令&#…

虛擬地址空間(下)進程地址空間(上)

一.關于頁表組成 1.權限&#xff08;rwx) 作用&#xff1a;如1.讓代碼區變成只讀的 2.寫時拷貝的實現&#xff1a;子進程創建時其頁表指向的父進程代碼和數據權限都是只讀的&#xff0c;子進程試圖修改&#xff0c;觸發錯誤&#xff0c;系統開始寫時拷貝。 來源&#xff1a;…

【區塊鏈 + 航運物流】豐溯 - 區塊鏈溯源平臺 | FISCO BCOS 應用案例

豐溯是順豐科技推出的區塊鏈溯源平臺&#xff0c; 采用 FISCO BCOS 底層開源框架&#xff0c; 為農副食品、 冷鏈生鮮等企業客戶及消費 者提供關鍵流通節點的溯源信息服務&#xff0c;形成從源頭到消費者端全鏈路透明的信息鏈。 在商貿消費領域&#xff0c; 溯源一直是保障產品…

iwebsec-SQL數字型注入

1.判斷是否存在漏洞 添加and 11發現正常顯示&#xff0c;添加and 12無回顯條目&#xff0c;則存在sql注入漏洞 2.因為有回顯&#xff0c;嘗試union聯合注入&#xff0c;使用order by判斷出有3個字段 3.使用union聯合注入查看回顯位&#xff0c;發現3三個字段均有回顯&#xff…

藍橋杯每日五題第一日

藍橋杯每日5題 問題一 班級活動 1.班級活動 - 藍橋云課 問題描述 小明的老師準備組織一次班級活動。班上一共有 nn 名 (nn 為偶數) 同學&#xff0c;老師想把所有的同學進行分組&#xff0c;每兩名同學一組。為了公平&#xff0c;老師給每名同學隨機分配了一個 nn 以內的正…

STM32 —— 嵌入式系統、通用計算機系統、物聯網三層架構

目錄 一、嵌入式系統的概念 二、通用計算機系統與嵌入式系統的比較 用途 硬件 軟件 性能與功耗 開發與維護 三、嵌入式系統與物聯網的關系 四、物聯網的三層架構 1. 感知層&#xff08;Perception Layer&#xff09; 2. 網絡層&#xff08;Network Layer&#xff09; …

卡碼網25題——掌握ACM輸入輸出方式(15 至 18)

刷題小記&#xff1a; 本期涉及ACM模式下棧和鏈表的構建與使用&#xff0c;值得學習。 卡瑪網15.神秘字符&#xff08;卡瑪網15.神秘字符&#xff09; 題目分析&#xff1a; 若給定2行字符串&#xff0c;其中第一個串的長度為偶數&#xff0c;現要求把第二個串插入到第一個…

前端字段名和后端不一致?解鎖 JSON 映射的“隱藏規則” !!!

&#x1f680; 前端字段名和后端不一致&#xff1f;解鎖 JSON 映射的“隱藏規則” &#x1f31f; 嘿&#xff0c;技術冒險家們&#xff01;&#x1f44b; 今天我們要聊一個開發中常見的“坑”&#xff1a;前端傳來的 JSON 參數字段名和后端對象字段名不一致&#xff0c;會發生…

python中使用單例模式在整個程序中只創建一個數據庫連接,節省資源

示例代碼&#xff1a; from loguru import logger from pymongo import MongoClient from pymongo.errors import ConnectionFailurefrom llm_engineering.settings import settingsclass MongoDatabaseConnector:_instance: MongoClient | None Nonedef __new__(cls, *args,…

AI小白的第六天:必要的數學知識(一)

在學習的過程中&#xff0c;不管是上代碼還是理論學習&#xff0c;其中都摻雜了一些數學知識。俗話說“磨刀不誤砍柴工”&#xff0c;而我已經“誤了砍柴功”了&#xff0c;現在變成了“亡羊補牢&#xff0c;為時不晚”。 線性代數 線性代數是數學的一個分支&#xff0c;主要…

【Linux】Bash是什么?怎么使用?

李升偉 整理 什么是 Bash&#xff1f; Bash&#xff08;Bourne Again Shell&#xff09;是一種 命令行解釋器&#xff08;Shell&#xff09;&#xff0c;廣泛用于 Unix 和 Linux 操作系統。它是 Bourne Shell&#xff08;sh&#xff09; 的增強版&#xff0c;提供了更多的功能…