IOT项目——STM32
IOT项目——STM32
- 第一部分:STM32F103C8T6 芯片介绍
- 核心特性
- 常见开发板
- 第二部分:开发环境搭建与使用
- 方案一:使用VSCode进行开发(强烈推荐)
- 方案二:使用PyCharm进行开发
- 总结与快速入门指南
好的,我们来详细介绍一下STM32F103C8T6这款经典的MCU,并讲解如何在PyCharm和VSCode中搭建开发环境。
第一部分:STM32F103C8T6 芯片介绍
STM32F103C8T6是意法半导体推出的基于ARM Cortex-M3内核的32位微控制器,因其极高的性价比和强大的生态,被誉为"单片机界的性价比之王"或"国民MCU"。
核心特性
-
内核:
- ARM Cortex-M3,最高主频 72MHz。
- 性能可达1.25 DMIPS/MHz。
-
存储:
- 64KB 的Flash存储器(实际使用中,部分批次可解锁至128KB,但设计时应以64KB为准)。
- 20KB 的SRAM。
-
丰富的外设:
- GPIO: 37个快速I/O口,大部分兼容5V电平。
- 定时器: 2个看门狗定时器,4个16位定时器(2个高级控制定时器,用于电机/PWM控制)。
- 通信接口:
- 3个USART(通用同步/异步收发器)
- 2个I2C
- 2个SPI
- 1个CAN 2.0B
- 1个USB 2.0全速设备接口
- ADC: 2个12位ADC,共10个通道。
- DMA: 7通道DMA控制器,减轻CPU负担。
-
封装与供电:
- LQFP48封装。
- 供电电压:2.0V ~ 3.6V。
常见开发板
最著名的就是 “Blue Pill”(蓝色药丸) 开发板,它核心就是STM32F103C8T6,并引出了所有IO口,配有3.3V LDO和USB串口电路,极大方便了学习和开发。
应用领域:
- 工业控制
- 消费电子设备
- 无人机飞控
- 3D打印机控制器
- 物联网节点设备
- 机器人关节控制
第二部分:开发环境搭建与使用
与ESP32类似,STM32也有多种开发框架,主要分为:
- STM32CubeIDE / 标准外设库: 意法半导体官方方案,寄存器/库函数操作,控制力最强,性能最优。
- Arduino框架: 通过STM32CubeProgrammer和Arduino Cores,使STM32可以用Arduino语法开发,对初学者友好,库生态丰富。
- PlatformIO: 一个跨平台的嵌入式开发工具,可以集成Arduino和HAL库等多种框架。
我们将重点介绍在PyCharm和VSCode中配置Arduino框架和HAL库框架的开发环境。
方案一:使用VSCode进行开发(强烈推荐)
VSCode通过PlatformIO插件,为STM32开发提供了无与伦比的便利性。
步骤 1: 安装必要软件
- 安装VSCode。
- 安装PlatformIO IDE插件。
步骤 2: 创建新项目(以Arduino框架为例)
- 打开PIO主页,点击
Create New Project
。 - Name: 输入项目名。
- Board: 搜索
BluePill F103C8
或Generic STM32F103C8
。 - Framework: 选择
Arduino
。 - 点击
Finish
。
步骤 3: 编写和上传代码
-
在
src/main.cpp
中编写代码。以下是一个LED闪烁示例(Blue Pill板载LED通常接在PC13):#include <Arduino.h>void setup() {pinMode(PC13, OUTPUT); // 初始化PC13为输出模式 }void loop() {digitalWrite(PC13, LOW); // 点亮LED(Blue Pill是低电平点亮)delay(1000);digitalWrite(PC13, HIGH); // 熄灭LEDdelay(1000); }
-
配置
platformio.ini
:[env:genericSTM32F103C8] platform = ststm32 board = genericSTM32F103C8 framework = arduino; 设置上传协议,ST-Link/V2是常用调试器 upload_protocol = stlink; 启用串口监视器 monitor_speed = 115200
- 关键点: 你需要一个下载器/调试器,最常见的是ST-Link V2。将ST-Link的SWDIO、SWCLK、GND、3.3V分别连接到Blue Pill的对应引脚。
- 替代方案: 可以使用USB转TTL串口工具,通过串口上传(需要配置boot0跳线帽),但不如ST-Link方便稳定。
-
编译和上传:
- 点击底部状态栏的
→
(Upload) 按钮。PlatformIO会自动编译并将程序烧录到芯片中。
- 点击底部状态栏的
使用HAL库开发(更专业)
在创建项目时,Framework
选择 STM32Cube
。这样项目结构会基于HAL库。
#include "main.h"
#include "stm32f1xx_hal.h" // 自动包含对应的HAL头文件// 全局句柄定义
UART_HandleTypeDef huart1;// 系统时钟配置等由CubeMX生成
void SystemClock_Config(void);int main(void) {HAL_Init();SystemClock_Config();// 初始化GPIO__HAL_RCC_GPIOC_CLK_ENABLE();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);HAL_Delay(500); // 使用HAL库的延时}
}// 时钟配置代码... (通常由工具生成)
这种方式更底层,需要对STM32的时钟树、外设有更深入的了解。你可以使用STM32CubeMX软件图形化配置引脚和时钟,然后生成代码,再将其导入到PlatformIO项目中使用。
方案二:使用PyCharm进行开发
与ESP32开发类似,PyCharm主要通过插件来支持STM32。
方法A:使用PlatformIO插件(推荐)
- 在PyCharm中安装PlatformIO插件。
- 创建和管理项目的流程与在VSCode中完全一样。这是PyCharm下最省心、功能最全的方案。
方法B:使用STM32CubeIDE + PyCharm作为代码编辑器
这是一种混合开发模式,利用了STM32CubeIDE强大的初始化和调试能力,以及PyCharm卓越的代码编辑能力。
- 安装STM32CubeIDE: 意法半导体官方推出的免费IDE,基于Eclipse,集成了CubeMX、编译和调试功能。
- 使用STM32CubeMX创建工程:
- 打开STM32CubeMX,选择STM32F103C8Tx。
- 图形化配置时钟、引脚、外设。
- 在
Project Manager
标签页,设置Toolchain / IDE
为Makefile
。 - 生成代码。
- 用PyCharm打开工程:
- 用PyCharm打开上一步生成的工程文件夹。
- 你可以享受PyCharm的代码补全、导航和重构功能来编辑代码。
- 编译和调试:
- 编译: 在PyCharm的终端中执行
make
命令。 - 上传/调试: 回到STM32CubeIDE中,使用其集成的GDB调试器连接ST-Link进行程序烧录和调试。
- 编译: 在PyCharm的终端中执行
这种方法比较"Geek",适合那些喜欢PyCharm但又离不开STM32CubeMX强大配置和调试功能的开发者。
总结与快速入门指南
给新手的建议:
-
硬件准备:
- 一块 STM32F103C8T6 “Blue Pill” 开发板。
- 一个 ST-Link V2 下载调试器(必备,比串口下载方便太多)。
- 若干杜邦线。
-
软件选择:
- 追求简单、快速上手: VSCode + PlatformIO + Arduino框架。这是最平滑的入门方式。
- 希望深入理解STM32,进行专业开发: VSCode + PlatformIO + HAL库框架,并配合STM32CubeMX进行图形化配置。
- PyCharm忠实用户: PyCharm + PlatformIO插件,流程与VSCode方案一致。
-
第一步(VSCode + PlatformIO + Arduino):
- 按上述步骤创建项目,复制LED闪烁代码。
- 用ST-Link连接Blue Pill(SWDIO -> DIO, SWCLK -> CLK, GND -> GND, 3.3V -> 3.3V)。
- 在
platformio.ini
中设置upload_protocol = stlink
。 - 点击上传,观察PC13的LED开始闪烁。
注意事项:
- 驱动: 确保电脑已安装ST-Link的驱动。
- Boot0: 在使用ST-Link下载时,Boot0引脚需要接地(GND)。开发板上通常有跳线帽,确保它跳在
0
的位置。 - 电压: STM32是3.3V器件,切勿接入5V电压,除非IO口标明的"FT"(5V容忍)。
掌握了这些,你就成功进入了STM32的世界!接下来可以探索ADC读取电位器、PWM控制舵机、通过串口与电脑通信、驱动OLED屏幕等更复杂的项目。