IOT项目——STM32

IOT项目------STM32

好的,我们来详细介绍一下STM32F103C8T6这款经典的MCU,并讲解如何在PyCharm和VSCode中搭建开发环境。

第一部分:STM32F103C8T6 芯片介绍

STM32F103C8T6是意法半导体推出的基于ARM Cortex-M3内核的32位微控制器,因其极高的性价比和强大的生态,被誉为"单片机界的性价比之王"或"国民MCU"。

核心特性
  1. 内核

    • ARM Cortex-M3,最高主频 72MHz
    • 性能可达1.25 DMIPS/MHz。
  2. 存储

    • 64KB 的Flash存储器(实际使用中,部分批次可解锁至128KB,但设计时应以64KB为准)。
    • 20KB 的SRAM。
  3. 丰富的外设

    • 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负担。
  4. 封装与供电

    • LQFP48封装。
    • 供电电压:2.0V ~ 3.6V。
常见开发板

最著名的就是 "Blue Pill"(蓝色药丸) 开发板,它核心就是STM32F103C8T6,并引出了所有IO口,配有3.3V LDO和USB串口电路,极大方便了学习和开发。

应用领域

  • 工业控制
  • 消费电子设备
  • 无人机飞控
  • 3D打印机控制器
  • 物联网节点设备
  • 机器人关节控制

第二部分:开发环境搭建与使用

与ESP32类似,STM32也有多种开发框架,主要分为:

  1. STM32CubeIDE / 标准外设库: 意法半导体官方方案,寄存器/库函数操作,控制力最强,性能最优。
  2. Arduino框架 : 通过STM32CubeProgrammerArduino Cores,使STM32可以用Arduino语法开发,对初学者友好,库生态丰富。
  3. PlatformIO: 一个跨平台的嵌入式开发工具,可以集成Arduino和HAL库等多种框架。

我们将重点介绍在PyCharm和VSCode中配置Arduino框架HAL库框架的开发环境。

方案一:使用VSCode进行开发(强烈推荐)

VSCode通过PlatformIO插件,为STM32开发提供了无与伦比的便利性。

步骤 1: 安装必要软件

  1. 安装VSCode。
  2. 安装PlatformIO IDE插件。

步骤 2: 创建新项目(以Arduino框架为例)

  1. 打开PIO主页,点击 Create New Project
  2. Name: 输入项目名。
  3. Board : 搜索 BluePill F103C8Generic STM32F103C8
  4. Framework : 选择 Arduino
  5. 点击 Finish

步骤 3: 编写和上传代码

  1. src/main.cpp 中编写代码。以下是一个LED闪烁示例(Blue Pill板载LED通常接在PC13):

    cpp 复制代码
    #include <Arduino.h>
    
    void setup() {
      pinMode(PC13, OUTPUT); // 初始化PC13为输出模式
    }
    
    void loop() {
      digitalWrite(PC13, LOW);  // 点亮LED(Blue Pill是低电平点亮)
      delay(1000);
      digitalWrite(PC13, HIGH); // 熄灭LED
      delay(1000);
    }
  2. 配置 platformio.ini

    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方便稳定。
  3. 编译和上传

    • 点击底部状态栏的 (Upload) 按钮。PlatformIO会自动编译并将程序烧录到芯片中。

使用HAL库开发(更专业)

在创建项目时,Framework 选择 STM32Cube。这样项目结构会基于HAL库。

cpp 复制代码
#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插件(推荐)

  1. 在PyCharm中安装PlatformIO插件。
  2. 创建和管理项目的流程与在VSCode中完全一样。这是PyCharm下最省心、功能最全的方案。

方法B:使用STM32CubeIDE + PyCharm作为代码编辑器

这是一种混合开发模式,利用了STM32CubeIDE强大的初始化和调试能力,以及PyCharm卓越的代码编辑能力。

  1. 安装STM32CubeIDE: 意法半导体官方推出的免费IDE,基于Eclipse,集成了CubeMX、编译和调试功能。
  2. 使用STM32CubeMX创建工程
    • 打开STM32CubeMX,选择STM32F103C8Tx。
    • 图形化配置时钟、引脚、外设。
    • Project Manager 标签页,设置 Toolchain / IDEMakefile
    • 生成代码。
  3. 用PyCharm打开工程
    • 用PyCharm打开上一步生成的工程文件夹。
    • 你可以享受PyCharm的代码补全、导航和重构功能来编辑代码。
  4. 编译和调试
    • 编译 : 在PyCharm的终端中执行 make 命令。
    • 上传/调试: 回到STM32CubeIDE中,使用其集成的GDB调试器连接ST-Link进行程序烧录和调试。

这种方法比较"Geek",适合那些喜欢PyCharm但又离不开STM32CubeMX强大配置和调试功能的开发者。


总结与快速入门指南

给新手的建议:

  1. 硬件准备

    • 一块 STM32F103C8T6 "Blue Pill" 开发板。
    • 一个 ST-Link V2 下载调试器(必备,比串口下载方便太多)。
    • 若干杜邦线。
  2. 软件选择

    • 追求简单、快速上手VSCode + PlatformIO + Arduino框架。这是最平滑的入门方式。
    • 希望深入理解STM32,进行专业开发VSCode + PlatformIO + HAL库框架,并配合STM32CubeMX进行图形化配置。
    • PyCharm忠实用户PyCharm + PlatformIO插件,流程与VSCode方案一致。
  3. 第一步(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屏幕等更复杂的项目。

相关推荐
光子物联单片机4 小时前
STM32G474单片机开发入门(十五)CAN通信功能详解及实战
stm32·单片机·嵌入式硬件·mcu
A9better4 小时前
嵌入式开发学习日志40——stm32之I2C协议层
stm32·单片机·嵌入式硬件·学习
来生硬件工程师4 小时前
【STM32笔记】:P03 ISP 一键下载电路详解
c语言·笔记·stm32·嵌入式硬件·硬件工程·接口隔离原则·硬件设计
可爱的鸡仔7 小时前
STM32--------ADC转换
stm32·单片机·嵌入式
DuHz8 小时前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
来生硬件工程师8 小时前
【STM32笔记】:P04 断言的使用
c语言·笔记·stm32·单片机·嵌入式硬件·硬件架构·硬件设计
GilgameshJSS9 小时前
STM32H743-ARM例程22-USB_CDC
arm开发·stm32·嵌入式硬件
江苏学蠡信息科技有限公司9 小时前
STM32中硬件I2C的时钟占空比
stm32·单片机·fpga开发
光子物联单片机9 小时前
STM32G474单片机开发入门(十七)DAC详解及输出电压和正弦波实战
stm32·单片机·嵌入式硬件·mcu