当前位置: 首页 > news >正文

【第二部分】STM32CubeMX 创建 STM32F103CBT6 完整标准流程

覆盖从新建工程→配置外设→时钟→中断→代码生成→MDK 编译下载全流程。

一、新建工程:选择 MCU

  1. 等待页面Rendering UI加载完成
  2. 点击中间板块ACCESS TO MCU SELECTOR进入芯片选择界面
  3. 芯片筛选:
    • Series:选择STM32F1 Series
    • Lines:选择STM32F103
    • Part Number:输入STM32F103CBT6,双击选中芯片
  4. 弹出芯片引脚图窗口,点击Start Project,进入主配置界面(Pinout & Configuration)

根据单片机选择芯片

二、引脚与外设功能配置

DMADirect Memory Access(直接存储器访问)无需CPU干预,在外设与存储器间高速搬运数据,释放CPU资源,常用于ADC、串口等大批量数据传输。
GPIOGeneral Purpose Input/Output(通用输入输出)可配置为输入、输出、复用功能或模拟模式的引脚,用于连接LED、按键、传感器等外部硬件。
WDGWatchDog(看门狗),通常指IWDG(独立看门狗)硬件定时器,需定期“喂狗”以防超时;超时则强制复位系统。IWDG使用独立时钟(LSI),可靠性高。
NVICNested Vectored Interrupt Controller(嵌套向量中断控制器)Cortex-M内核的中断管理单元,负责中断使能、优先级分组和嵌套抢占,实现高优先级中断及时响应。
RCCReset and Clock Control(复位与时钟控制)管理系统复位、时钟源选择(晶振、PLL倍频)及外设时钟门控,是芯片的时钟总开关。
SYSSystem(系统控制),对应SYSCFG配置控制器负责存储器地址重映射、IO补偿、Boot模式管理及调试接口(SWD/JTAG)等芯片级配置。
WWDGWindow WatchDog(窗口看门狗)不仅有超时限制,还要求喂狗必须在预设的“时间窗口”内(不能太早也不能太晚),用于检测程序执行时序异常。

(1)配置RCC

【1】进入 RCC 配置页面

  1. 打开 CubeMX,完成芯片选择进入Pinout & Configuration主界面
  2. 左侧分类栏System Core,点击勾选RCC进入时钟外设配置面板(对应你截图左侧红框)

【2】高速外部时钟 HSE 基础配置(核心第一步)

  1. 找到High Speed Clock (HSE)下拉框,选择:Crystal/Ceramic Resonator(无源晶振模式,你的硬件 8MHz 晶振)
    1. 【若硬件是有源晶振选Bypass clock source;无外部晶振选Disable】
  2. Low Speed Clock (LSE):本工程不用 RTC,保持Disable;需日历则改为Crystal外接 32.768K 晶振
  3. Master Clock Output:取消勾选(无需 MCO 时钟输出调试)
  4. 下方GPIO Settings自动锁定 PD0 (OSC_IN)、PD1 (OSC_OUT) 为晶振模拟引脚,无需手动修改 GPIO 电气参数

【3】进入 Clock Configuration 时钟树页面配置 PLL 与总线分频

  1. 点击顶部导航栏切换到Clock Configuration标签页

  2. 配置 HSE 预分频:HSE 输入分频选择/1(8MHz 直接送入 PLL)

  3. PLL 倍频配置:

    • PLL Source:选择HSE(时钟源取自外部 8M 晶振)

    • PLL Mul 倍频系数:选择×9,计算:8MHz × 9 = 72MHz

  4. 系统时钟切换:System Clock Mux 选择PLLCLK,SYSCLK 锁定 72MHz

  5. 配置各总线预分频(和你工程完全匹配)

    1. AHB Prescaler:/1→ HCLK=72MHz(内核、DMA、Flash 时钟)

    2. APB1 Prescaler:/2→ PCLK1=36MHz;APB1 定时器自动倍频 ×2=72MHz

    3. APB2 Prescaler:/1→ PCLK2=72MHz(TIM1、CAN、GPIOA 外设时钟)

    4. ADC Prescaler:/6→ ADC 时钟 = 12MHz(F1 最大安全 14MHz 以内)

  6. 页面红色报错框消失,点击Resolve Clock Issues自动修正冲突

(2)配置定时器

定时器工作模式核心用途时钟来源
TIM1基础定时 + 更新中断系统 1ms 时基、周期性任务内部 72MHz 总线时钟
TIM2中心对齐 PWM 输出直流 / 步进电机驱动内部 72MHz 总线时钟
TIM3 、4正交编码器模式旋转位置、速度采集外部 A/B 相脉冲
  1. 打开 Pinout & Configuration,左侧 Categories 展开Timers
  2. 选中目标 TIM 外设,自动开启对应总线时钟;TIM1 挂载 APB2 (72MHz),TIM2/TIM4 挂载 APB1(定时器时钟倍频至 72MHz)
  3. 时钟树提前配置完成:HSE=8M,SYSCLK=72MHz,APB1 预分频 / 2

【1】TIM1 1ms 定时中断配置流程(通用系统时基)

步骤 1:Mode 模式基础设置

  1. 选中左侧TIM1进入配置面板

  2. Clock Source下拉选择Internal Clock(使用内部总线 72MHz 时钟)

  3. Slave Mode / Trigger Source:保持Disable

  4. Channel1~Channel4、Combined Channels:全部Disable(仅做定时,不用捕获 / PWM)

步骤 2:Parameter Settings 计数参数配置

  1. 切换Parameter Settings标签,展开 Counter Settings:

    • Prescaler(PSC):71

    • Counter Mode:Up向上计数

    • Counter Period(ARR):1999

    • Internal Clock Division(CKD):No Division

  2. 定时周期验算:

步骤 3:NVIC 中断开启(定时溢出中断)

  1. 切换NVIC Settings标签

  2. 找到TIM1 update interrupt,勾选Enabled使能中断

  3. Preemption Priority:2,Sub Priority:0(中等优先级)

步骤 4:引脚校验

TIM1 仅做内部定时,无复用引脚,右侧 Pin 视图无绿色 TIM1 引脚,无需操作 GPIO。

【2】TIM2 两路中心对齐 PWM 输出配置流程(电机驱动)

步骤 1:Mode 模式 PWM 通道配置

  1. 左侧选中TIM2

  2. Clock Source 自动跟随 APB1 定时器时钟,无需手动选择

  3. Channel1:PWM Generation CH1;Channel2:PWM Generation CH2

  4. Channel3/4、Combined Channels:Disable

  5. Slave/Trigger Source:Disable

步骤 2:Parameter Settings 计数与波形模式

  1. Prescaler(PSC):71

  2. Counter Mode:Center Aligned mode1中心对齐

  3. Counter Period(ARR):99

  4. CKD:No Division周期计算:

步骤 3:GPIO 引脚自动分配

右侧 Pin 视图自动点亮:

  • PA0 = TIM2_CH1

  • PA1 = TIM2_CH2

  • 引脚自动配置为复用推挽输出,无需手动修改 GPIO 模式。

步骤 4:NVIC(可选,本工程未开 TIM2 中断)

无需开启 TIM2 全局中断,仅输出波形不用中断。

【3】TIM3、4 正交编码器硬件计数配置流程(旋转编码器采集)

步骤 1:Mode 编码器模式配置

  1. 左侧选中TIM4

  2. Clock Source 不勾选 Internal Clock(编码器使用外部 A/B 相脉冲作为计数时钟)

  3. Channel1/2/3/4:全部Disable

  4. Combined Channels 下拉选择Encoder Mode(正交编码器硬件模式)

  5. Slave/Trigger Source:Disable

步骤 2:Parameter Settings 计数参数

  • Prescaler(PSC):0(编码器脉冲不预分频,每脉冲计数一次)

  • Counter Mode:Up

  • Counter Period(ARR):65535(16 位定时器最大计数值,防止溢出)

  • CKD:No Division

步骤 3:GPIO 输入引脚配置

切换GPIO Settings标签:

  • PB6 = TIM4_CH1、PB7 = TIM4_CH2

  • GPIO mode:Input mode

  • Pull-up/Pull-down:No pull-up/pull-down(编码器自带上下拉则浮空输入)

步骤 4:NVIC(可选)

本工程未开启TIM4 global interrupt,靠主循环读取计数值;需溢出判断再勾选中断。

(3)GPIO引脚外设勾选

引脚号引脚名称功能分类具体功能/复用使用状态电气配置备注说明
1VBAT系统电源RTC后备电池供电系统引脚3.3V后备电池本工程LSE禁用,可悬空
2PC13GPIOGPIO输出/EXTI13/RTC闹钟未使用浮空输入可用于LED指示或按键
3PC14GPIOGPIO输出/EXTI14/OSC32_IN未使用浮空输入LSE晶振输入(未用)
4PC15GPIOGPIO输出/EXTI15/OSC32_OUT未使用浮空输入LSE晶振输出(未用)
5PD0RCC时钟RCC_OSC_IN / HSE晶振输入已使用模拟专用引脚8MHz外部晶振输入
6PD1RCC时钟RCC_OSC_OUT / HSE晶振输出已使用模拟专用引脚8MHz外部晶振输出
7NRST系统复位硬件复位引脚,低电平有效系统引脚外部上拉10KΩ复位按键连接
8VSSA模拟电源模拟地系统引脚GNDADC模拟电路地
9VDDA模拟电源模拟电源3.3V系统引脚3.3VADC模拟电路电源
10PA0定时器TIM2_CH1 / PWM通道1输出已使用复用推挽输出中心对齐PWM输出
11PA1定时器TIM2_CH2 / PWM通道2输出已使用复用推挽输出中心对齐PWM输出
12PA2GPIOGPIO输出 / USART2_TX已使用推挽输出通用输出/指示灯
13PA3GPIOGPIO输出 / USART2_RX已使用推挽输出通用输出/指示灯
14VSS数字电源数字地系统引脚GND数字电路地
15VDD数字电源数字电源3.3V系统引脚3.3V数字电路电源
16PA4GPIOGPIO输出 / SPI1_NSS / DAC1_OUT已使用推挽输出通用输出/指示灯
17PA5GPIOGPIO输出 / SPI1_SCK已使用推挽输出通用输出/指示灯
18PA6GPIOGPIO输出 / SPI1_MISO / TIM3_CH1已使用推挽输出通用输出/指示灯
19PA7GPIOGPIO输出 / SPI1_MOSI / TIM3_CH2已使用推挽输出通用输出/指示灯
20PB0GPIO/ADCGPIO / ADC1_IN8 / TIM3_CH3未使用浮空输入预留ADC采集通道
21PB1GPIO/ADCGPIO / ADC2_IN9 / TIM3_CH4未使用浮空输入预留ADC采集通道
22PB2GPIOGPIO / BOOT1未使用浮空输入BOOT1启动配置引脚
23PB3GPIOGPIO / JTDO / SPI1_SCK未使用浮空输入JTAG调试引脚
24PB4GPIOGPIO / JNTRST / SPI1_MISO未使用浮空输入JTAG调试引脚
25PB5GPIOGPIO / JTDI / SPI1_MOSI / I2C1_SMBA未使用浮空输入JTAG调试引脚
26PB6定时器TIM4_CH1 / 编码器A相输入已使用浮空输入正交编码器CH1
27PB7定时器TIM4_CH2 / 编码器B相输入已使用浮空输入正交编码器CH2
28BOOT0系统启动启动模式配置引脚系统引脚硬件接地主闪存启动模式
29PB8外部中断GPIO_EXTI8 / 上升沿触发中断已使用内部下拉输入外部传感器/限位开关
30PB9外部中断GPIO_EXTI9 / 上升沿触发中断已使用内部下拉输入外部传感器/限位开关
31VSS数字电源数字地系统引脚GND数字电路地
32VDD数字电源数字电源3.3V系统引脚3.3V数字电路电源
33PB10外部中断GPIO_EXTI10 / 上升沿触发中断已使用内部下拉输入按键/故障检测
34PB11外部中断GPIO_EXTI11 / 上升沿触发中断已使用内部下拉输入按键/故障检测
35PB12外部中断GPIO_EXTI12 / 上升沿触发中断已使用内部下拉输入按键/故障检测
36PB13外部中断GPIO_EXTI13 / 上升沿触发中断已使用内部下拉输入按键/故障检测
37PB14外部中断GPIO_EXTI14 / 上升沿触发中断已使用内部下拉输入按键/故障检测
38PB15外部中断GPIO_EXTI15 / 上升沿触发中断已使用内部下拉输入按键/故障检测
39PA8GPIOGPIO / MCO / TIM1_CH1未使用浮空输入可用于时钟输出调试
40PA9GPIOGPIO / USART1_TX / TIM1_CH2未使用浮空输入预留串口发送
41PA10GPIOGPIO / USART1_RX / TIM1_CH3未使用浮空输入预留串口接收
42PA11CAN通信CAN_RX / CAN总线数据接收已使用复用输入CAN总线接收
43PA12CAN通信CAN_TX / CAN总线数据发送已使用复用推挽输出CAN总线发送
44PA13GPIOGPIO / JTMS / SWDIO未使用浮空输入SWD调试数据引脚
45VSS数字电源数字地系统引脚GND数字电路地
46VDD数字电源数字电源3.3V系统引脚3.3V数字电路电源
47PA14GPIOGPIO / JTCK / SWCLK未使用浮空输入SWD调试时钟引脚
48PA15GPIOGPIO / JTDI / SPI1_NSS / TIM2_CH1_ETR未使用浮空输入JTAG调试引脚

引脚名初始输出电平GPIO 工作模式上下拉配置最大输出速度是否手动修改 (Modified)功能说明
PA2LowOutput Push Pull(推挽输出)No pull-up/pull-down(无上下拉)Low未勾选通用数字输出,上电默认低电平,用于指示灯 / 继电器
PA3LowOutput Push Pull(推挽输出)No pull-up/pull-down(无上下拉)Low未勾选通用数字输出,上电默认低电平,用于指示灯 / 继电器
PA4LowOutput Push Pull(推挽输出)No pull-up/pull-down(无上下拉)Low未勾选通用数字输出,上电默认低电平,用于指示灯 / 继电器
PA5LowOutput Push Pull(推挽输出)No pull-up/pull-down(无上下拉)Low未勾选通用数字输出,上电默认低电平,用于指示灯 / 继电器
PB8n/aInput mode(普通输入)Pull-down(内部下拉)n/a✅ 已勾选普通电平采集输入,需 CPU 轮询读取电平
PB9n/aInput mode(普通输入)Pull-down(内部下拉)n/a✅ 已勾选普通电平采集输入,需 CPU 轮询读取电平
PB10n/aInput mode(普通输入)Pull-down(内部下拉)n/a✅ 已勾选普通电平采集输入,需 CPU 轮询读取电平
PB11n/aInput mode(普通输入)Pull-down(内部下拉)n/a✅ 已勾选普通电平采集输入,需 CPU 轮询读取电平
PB12n/aExternal Interrupt(外部中断)Pull-down(内部下拉)n/a✅ 已勾选上升沿触发外部中断,信号跳变自动进入中断服务函数
PB13n/aExternal Interrupt(外部中断)Pull-down(内部下拉)n/a✅ 已勾选上升沿触发外部中断,信号跳变自动进入中断服务函数

三、NVIC 中断优先级配置(Pinout 页面 NVIC 标签)

【1】进入 NVIC 配置界面

  1. 打开工程Pinout & Configuration主页面
  2. 左侧分类栏System Core,点击NVIC,进入中断配置总表页面

【2】中断使能与优先级配置(按截图红框逐条操作)

表格三列:Enabled(使能)/Preemption Priority(抢占优先级)/Sub Priority(子优先级)

1. CAN RX1 interrupt(CAN 接收中断)

  1. 勾选Enabled开启中断
  2. Preemption Priority:0(最高抢占优先级)
  3. Sub Priority:1

作用:CAN 总线收到报文立即触发,保证通信实时性

2. TIM1 update interrupt(TIM1 1ms 定时溢出中断)

  1. 勾选Enabled开启更新中断
  2. Preemption Priority:2(中等优先级)
  3. Sub Priority:0

作用:每 1ms 进入中断执行周期任务,优先级低于 CAN、外部中断

3. EXTI line [15:10] interrupts(PB10~PB15 外部中断)

  1. 勾选Enabled开启中断
  2. Preemption Priority:1
  3. Sub Priority:0

作用:PB10~PB15 电平上升沿触发中断,优先级高于定时、低于 CAN

4. USART1 global interrupt(串口 1 全局中断)

  1. 勾选Enabled开启串口收发中断
  2. Preemption Priority:0(与 CAN 同级最高抢占)
  3. Sub Priority:0

5. 其余中断全部取消勾选

CAN SCE、TIM1 刹车 / 捕获比较、TIM2/3/4 全局、ADC、RCC、Flash 等中断全部不使能。

【3】中断优先级规则说明(F1 系列默认分组 2)

STM32F1 默认 NVIC 分组 2:2 位抢占优先级 + 2 位子优先级优先级数值越小,响应权限越高:

  1. 抢占优先级0>1>2:高抢占可打断低抢占中断
    • CAN RX、USART1:抢占 0(最高,可抢占外部中断、定时器)
    • EXTI10~15:抢占 1(可抢占 TIM1 定时中断)
    • TIM1 更新:抢占 2(最低,不会打断其他中断)
  2. 子优先级仅在同抢占优先级时生效,不支持中断嵌套:CAN RX 抢占 0、子 1;USART1 抢占 0、子 0 → 同时触发时,USART1 优先执行

四、工程管理参数配置(Project Manager 标签)

Project 工程基础设置

  • Project Name:自定义工程名(如 Motor_CAN)
  • Project Location:选择英文无空格路径(禁止中文文件夹)
  • Toolchain/IDE:选择STM32CubelDE
http://www.gsyq.cn/news/1596070.html

相关文章:

  • 开源网盘直链下载助手完整指南:告别限速困扰
  • 化工厂跨厂区设备无线通信物联网方案
  • Serverless 架构与自动化发布流水线:从冷启动优化到 GitOps 的工程实战
  • 2026填志愿用的资料,我帮你打包好了,直接拿
  • 客户服务AI智能体采用率飙升:70%组织60天见成效,新定价模式加速企业应用
  • paraphrase-multilingual-MiniLM-L12-v2完整指南:3步实现多语言语义搜索
  • Altium Designer 2024 原理图高级功能:原理图和PCB网络颜色同步
  • iOS审核被拒:4.1 仿制品与马甲包——你的“创新”在苹果眼里只是复制粘贴
  • N-聚糖的分析和未来挑战
  • 做了5个企业级AI项目后,我对Token服务商选型的几点忠告
  • App 爬虫抓包与数据采集实战——mitmproxy + Fiddler
  • 碧蓝航线Live2D资源提取:从游戏到创意作品的桥梁探索
  • 仙工智能:“机器人大脑第一股”上市,“卖大脑”却靠“卖身体”,错位模式能走多远?
  • Java RSA数字签名实战:从原理到API安全与软件验签应用
  • 市场耐磨的撕碎机刀片销售厂家有哪些
  • 10月开源硬件项目精选:ESP32-C6与STM32H743应用解析
  • MyBatis-Plus 高级用法实战——分页、条件构造器、乐观锁、逻辑删除
  • Sunshine游戏串流:如何构建跨平台自托管游戏中心
  • 小白 程序员 6 个低门槛 AI 副业,零基础也能月入 2w+
  • 如何快速解决联发科设备变砖问题:终极修复方案
  • Scrapy-Redis 分布式爬虫实战——从单机到集群
  • Apache Dubbo:企业级微服务框架的标杆
  • 360互联网安全大会聚焦智能体威胁,“中国版Mythos”能否破网络安全困局?
  • LinkSwift:九大网盘直链解析工具,开启高速下载新体验
  • Windows PDF处理终极方案:Poppler预编译包完整指南
  • 设计数据密集型应用第2版:2025-2026出版新书的《人月神话》引用(4)
  • 夏天总疲惫乏力、容易累、爱出汗的人,常喝这杯茶,养出元气满满好状态~
  • 终极无广告体验:SpotifyPremium桌面版完整配置指南
  • ts3380,G3000,ix6780,MG3640,ix6700,ix6800,G5080,TS8380,ts8220报错5B00,P07,E08,1700,5b02废墨垫清零,亲测可用
  • 鸿蒙语音识别的 Flutter ↔ ArkTS 完整调用链:权限申请、引擎生命周期与结果回传的时序问题