單片機:STM32F103的開發環境搭建

本文將詳細介紹如何搭建STM32F103的開發環境。STM32F103是STMicroelectronics推出的一款基于ARM Cortex-M3內核的32位微控制器(MCU),廣泛應用于嵌入式開發。以下是搭建開發環境的詳細步驟,涵蓋硬件準備、軟件安裝、工具鏈配置及簡單的開發示例。


1. 硬件準備

在搭建STM32F103開發環境之前,需要準備以下硬件:

  • STM32F103開發板:常見型號包括STM32F103C8T6(“藍板”)或STM32F103ZET6開發板(如正點原子、野火等)。
  • 調試器/編程器:推薦使用ST-Link V2、J-Link或DAP-Link,用于程序下載和調試。
  • USB-TTL模塊:如CH340、FT232R,用于串口通信調試。
  • 連接線:杜邦線、USB線等,用于連接開發板與PC。
  • 電源:通常開發板通過USB供電(5V),確保供電穩定。
  • PC:Windows、Linux或macOS系統均可,推薦Windows 10/11以獲得更好的工具支持。

2. 軟件工具鏈準備

STM32F103的開發需要以下軟件工具,包括IDE、驅動、固件庫和燒錄工具。以下是推薦的工具及安裝步驟:

2.1 集成開發環境(IDE)

推薦使用以下兩種主流IDE:

  • STM32CubeIDE(推薦):
    • STM32CubeIDE是ST官方推出的免費IDE,集成了代碼編輯、調試、配置工具和固件庫。
    • 安裝步驟
      1. 訪問ST官方網站,下載最新版本的STM32CubeIDE(支持Windows/Linux/macOS)。
      2. 安裝時選擇默認設置,確保安裝路徑無中文字符。
      3. 安裝完成后,啟動STM32CubeIDE,登錄ST賬戶(可選)以激活完整功能。
  • Keil MDK-ARM
    • Keil是專業的嵌入式開發工具,支持ARM Cortex-M系列,適合需要高性能調試的用戶。
    • 安裝步驟
      1. 訪問Keil官網,下載MDK-ARM(需購買許可證,免費版有代碼大小限制)。
      2. 安裝Keil MDK和STM32相關Pack(如STM32F1xx_DFP)。
      3. 配置ARM編譯器(通常隨MDK安裝)。

選擇建議:初學者推薦STM32CubeIDE,免費且功能全面;專業開發者可選擇Keil以獲得更強大的調試功能。

2.2 驅動安裝
  • ST-Link驅動
    • 如果使用ST-Link調試器,需安裝驅動。
    • 下載地址:ST-Link驅動。
    • 安裝后,連接ST-Link到PC,在設備管理器中檢查是否識別為“STM32 STLink”。
  • USB-TTL驅動
    • 若使用CH340/CH341模塊,需安裝對應驅動(從模塊供應商官網或芯片廠家網站下載)。
2.3 STM32CubeMX(可選,但推薦)
  • STM32CubeMX是ST官方的圖形化配置工具,用于生成初始化代碼、配置外設(如GPIO、UART、TIM等)。
  • 安裝步驟
    1. 從ST官網下載STM32CubeMX。
    2. 安裝并確保Java環境已配置(若未安裝,下載Java SE)。
    3. 啟動CubeMX,下載STM32F1系列固件庫(在CubeMX中選擇“Manage Software Installations”)。
2.4 固件庫

STM32F103開發支持以下兩種固件庫:

  • 標準外設庫(SPL):傳統方式,代碼手動配置,適合小型項目。
    • 下載地址:STM32F1標準庫。
  • HAL庫(推薦):STM32Cube框架下的硬件抽象層,代碼可移植性強,適合復雜項目。
    • HAL庫通過STM32CubeMX自動生成,或從ST官網下載。
2.5 燒錄工具
  • STM32CubeProgrammer
    • ST官方燒錄工具,支持ST-Link、J-Link、串口等多種燒錄方式。
    • 下載地址:STM32CubeProgrammer。
    • 安裝后,用于固件下載和Flash擦除。
  • ST-Link Utility(舊工具):功能類似,但CubeProgrammer更現代化。
2.6 終端工具(用于串口調試)
  • PuTTYTera Term:用于查看串口輸出,調試程序。
  • 安裝步驟
    1. 下載PuTTY(官網)或Tera Term。
    2. 配置串口參數(波特率通常為115200,具體視程序而定)。

3. 開發環境配置

以下以STM32CubeIDE + STM32CubeMX + ST-Link為例,說明配置步驟:

3.1 配置STM32CubeMX
  1. 打開STM32CubeMX,選擇“New Project”。
  2. 在MCU選擇界面,搜索“STM32F103”(如STM32F103C8T6),選擇對應型號。
  3. 配置外設:
    • 例如,配置PA9/PA10為UART1,設置波特率為115200。
    • 配置系統時鐘(HSE/PLL),如使用8MHz外部晶振,設置主頻為72MHz。
  4. 在“Project Manager”中:
    • 設置項目名稱和保存路徑。
    • 選擇工具鏈為“STM32CubeIDE”。
    • 選擇固件包(HAL或LL)。
  5. 點擊“Generate Code”,生成初始化代碼。
3.2 在STM32CubeIDE中開發
  1. 打開STM32CubeIDE,導入CubeMX生成的項目(選擇.ioc文件)。
  2. 編寫用戶代碼:
    • main.c中,找到/* USER CODE BEGIN *//* USER CODE END */區域,添加功能代碼。
    • 示例:點亮LED(假設LED接在PC13):
      #include "main.h"
      void SystemClock_Config(void); // 確保包含時鐘配置
      int main(void) {HAL_Init();SystemClock_Config();__HAL_RCC_GPIOC_CLK_ENABLE(); // 使能GPIOC時鐘GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = GPIO_PIN_13;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);while (1) {HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 翻轉LED狀態HAL_Delay(500); // 延時500ms}
      }
      
  3. 配置調試器:
    • 在“Run > Debug Configurations”中,選擇ST-Link,設置端口和調試模式(SWD)。
  4. 編譯并下載:
    • 點擊“Build”按鈕編譯項目。
    • 連接ST-Link,點擊“Debug”按鈕下載程序到開發板。
3.3 驗證環境
  • 編譯無錯誤后,程序將通過ST-Link燒錄到STM32F103。
  • 觀察開發板上LED閃爍,確認程序運行正常。
  • 若使用串口調試,可添加以下代碼發送數據:
    uint8_t msg[] = "Hello, STM32!\r\n";
    HAL_UART_Transmit(&huart1, msg, sizeof(msg), 100);
    
    在PuTTY中配置串口,查看輸出。

4. 常見問題及解決

  • ST-Link無法識別
    • 檢查驅動是否正確安裝。
    • 確保ST-Link固件版本與工具兼容(可用STM32CubeProgrammer升級固件)。
  • 程序無法運行
    • 檢查時鐘配置是否正確(CubeMX中HSE/PLL設置)。
    • 確認開發板BOOT引腳配置(BOOT0=0為Flash啟動)。
  • 串口無輸出
    • 檢查USB-TTL模塊連接(TX接RX,RX接TX)。
    • 確認波特率匹配。

5. 擴展建議

  • 學習資源
    • ST官網文檔:STM32F1參考手冊。
    • 社區教程:正點原子、野火等提供的STM32教程。
    • 在線論壇:STM32社區、CSDN、知乎等。
  • 進階開發
    • 學習FreeRTOS,擴展實時操作系統開發。
    • 使用CubeMX配置復雜外設(如SPI、I2C、DMA)。
    • 探索低功耗模式和中斷處理。
  • 其他工具
    • 邏輯分析儀(如Saleae Logic)用于信號調試。
    • VS Code + PlatformIO,適合輕量級開發。

6. 總結

搭建STM32F103開發環境需要準備硬件(開發板、調試器)、安裝軟件(STM32CubeIDE、CubeMX、驅動等)并進行配置。通過STM32CubeMX生成初始化代碼,結合STM32CubeIDE進行開發和調試,初學者可以快速上手。推薦從簡單的LED閃爍程序開始,逐步深入外設和系統開發。

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

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

相關文章

eNSP中實現vlan間路由通信(路由器)

eNSP中實現vlan間路由通信(路由器) 拓撲圖PC配置 pc1:192.168.10.1255.255.255.0192.168.10.254pc2:192.168.20.1255.255.255.0192.168.20.254pc3: 192.168.10.2255.255.255.0192.168.10.254pc4:192.168.20.2255.255.2…

spring6合集——spring概述以及OCP、DIP、IOC原則

spring6合集——Spring6核心知識點總結啟示錄一、SOLID原則1. 單一職責原則(SRP)2. 開閉原則(OCP)3. 里氏替換原則(LSP)4. 接口隔離原則(ISP)5. 依賴倒置原則(DIP&#x…

Stata如何做機器學習?——SHAP解釋框架下的足球運動員價值驅動因素識別:基于H2O集成學習模型

SHAP解釋框架下的足球運動員價值驅動因素識別——基于H2O集成學習模型? 歡迎關注 「阿水實證通」,前沿方法時刻看!🌟🌟🌟 文章目錄 SHAP解釋框架下的足球運動員價值驅動因素識別——基于H2O集成學習模型?聚焦&…

基于Android的益智游戲學習系統

博主介紹:java高級開發,從事互聯網行業多年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了多年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

Oracle11G Linux版本(linux_x86_64_oracle11.2.0.4)

Oracle11G Linux版本 linux_x86_64_oracle11.2.0.4 文件分割成 七個 壓縮包,必須集齊 七個 文件后才能一起解壓一起使用: p13390677_112040_Linux-x86-64_7of7.zip下載地址: https://download.csdn.net/download/weixin_43800734/20303421 p1…

C++20中的counting_semaphore的應用

一、std::counting_semaphore 在前面介紹過C20中的同步庫,其中就提到過std::counting_semaphore。但當時的重點是同步庫的整體介紹,本文則會對std::counting_semaphore這個信號量進行一個全面的分析和說明,并有針對性的給出具體的例程。 C20中…

mongo常用命令

1 連接mongo服務器 mongo ip:端口/庫名 -u 用戶名 -p 密碼 2 選擇數據庫 show dbs; 顯示數據庫列表 use 數據庫名稱; 3 集合操作 (1) 顯示集合列表 show tables; (2)刪除集合 db.集合名稱.drop(); (3&#x…

華為云 銀河麒麟 vscode遠程連接

解決方案 檢查 SSH 服務器配置: 在遠程主機上編輯 /etc/ssh/sshd_config 文件 關鍵配置說明: AllowTcpForwarding yes # 允許TCP端口轉發(必須開啟) AllowAgentForwarding yes # 允許SSH代理轉發(可選&#xf…

有限狀態機(Finite State Machine)

文章目錄有限狀態機(Finite State Machine)簡介狀態機的組成六要素(1) 狀態集合(2) 初態(3) 終態(4) 輸入符號集(5) 輸出符號集(6) 狀態轉移函數狀態機的工作四要素(1) 現態(2) 輸入(3) 輸出(4) 次態FPGA中的狀態機模型1. Moore型狀態機(1) Moore l型(2)…

前端框架中注釋占位與Fragment內容替換的實現與優化

在現代前端開發中,使用注釋占位符替換Fragment內容是一種常見的需求,尤其在處理動態內容、模板預加載和組件復用場景中。React和Vue作為當前最主流的前端框架,提供了不同的實現方式和優化策略,但核心目標都是減少不必要的DOM操作&…

uniapp中使用web-worker性能優化的分享

為什么要使用 web-workers原因很簡單,將復雜的計算邏輯和耗時邏輯放到線程中運行,避免ui阻塞,防止卡頓問題場景:本次運用于GPS 位置更新接入小程序注意事項:微信小程序中只允許存在一個 worker所以,需要再一…

5118 API智能處理采集數據教程

簡數采集器支持調用5118 API接口處理采集的數據標題和內容、關鍵詞、描述等,還可配合簡數采集的SEO功能優化文章數據,對提高收錄有積極的作用。 簡數采集器支持5118接口:5118智能核心詞提取API 和 5118智能摘要提取API 。 接入使用教程 1. …

【深度學習:進階篇】--4.2.詞嵌入和NLP

在RNN中詞使用one_hot表示的問題 假設有10000個詞 每個詞的向量長度都為10000,整體大小太大 沒能表示出詞與詞之間的關系 例如Apple與Orange會更近一些,Man與Woman會近一些,取任意兩個向量計算內積都為0 目錄 1.詞嵌入 1.1.特點 1.3.wor…

WebRTC 的 ICE candidate 協商

文章目錄 前言WebRTC 的 ICE candidate 協商1. 什么是 ICE candidate?2. ICE 協商的流程3.前端使用 ICE candidate 協商代碼示例1)收集 candidate 并發送2)WebSocket 接收 candidate 并添加 4. ICE candidate 的類型5. ICE 協商常見問題6. 關…

卡爾曼濾波介紹

卡爾曼濾波介紹📖 **卡爾曼濾波原理簡介**🔑 **核心思想**📦 **卡爾曼濾波的組成**🔍 **代碼分析(kalman_filter.py)**🏗? 1. 狀態空間定義🔄 2. 初始化模型矩陣🚀 3. 核…

遞歸與循環

文章目錄遞歸TestRecursiveListRemoveNodeTestRecursiveListRemoveNode2循環TestWhileLoopListRemoveNodeTestWhileLoopListRemoveNode2遞歸 關鍵理解這幾點: 1、求解基本問題 2、將原問題拆分為小問題,直至基本問題(難點) 3、借…

3D魔方游戲

# 3D魔方游戲 這是一個基于Three.js的3D魔方游戲,支持2到6階魔方的模擬操作。 ## 功能特點 - 支持2到6階魔方 - 真實的3D渲染效果 - 鼠標操作控制 - 隨機打亂功能 - 提示功能 - 重置功能 ### 安裝依賴 bash npm install ### 啟動游戲 bash npm start 然…

下載安裝 com0com

下載 在 sourceforge 網站下載安裝器:下載鏈接 安裝完成后可以在設備管理器中看到默認創建的一對虛擬串口 使用串口調試助手收發 使用串口調試助手分別打開。如下圖所示,在端口選擇的下拉列表中可以看到剛才在設備管理器中看到的 COM3 和 COM5 分…

C++ 應用軟件開發從入門到實戰詳解

目錄 1、引言 2、IDE 開發環境介紹 2.1、Visual Studio 2.2、Qt Creator 3、 C語言特性 3.1、熟悉泛型編程 3.2、了解C/C異常處理 3.3、熟練使用STL容器 3.4、熟悉C11新特性 4、Windows 平臺的編程技術與調試技能 4.1、需要掌握的若干編程技術和基礎知識 4.2、需…

Python爬蟲實戰:研究slug相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網技術的快速發展,網絡上的信息量呈爆炸式增長。如何從海量的非結構化數據中提取有價值的信息,成為當前數據科學領域的重要研究方向。網絡爬蟲作為一種自動化數據采集工具,可以高效地獲取網頁內容,為數據分析提供豐富的數據來源。 Sl…