本文将详细介绍如何搭建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…