STM32从零到量产开发:四路继电器工业控制模块开发— CubeMX 配置表

芯片:STM32F103RCT6(LQFP64,256KB Flash / 48KB RAM)
工具链:STM32CubeMX 6.x | FW_F1 V1.8.x | Keil MDK-ARM V5.32
文档状态:已确认(配置与固件 v1.0.0 一致,实测 32/32 通信全 PASS) — 见 §6 配置审计结论


1. 系统总览

项目
MCU 型号 STM32F103RCT6
封装 LQFP64
Flash / RAM 256KB / 48KB
主频 72MHz(HSE 8MHz × PLL9)
调试接口 Serial Wire(PA13=SWDIO, PA14=SWCLK)
时钟源 HSE = 8MHz Crystal (PD0/PD1);LSE = 32.768kHz Crystal (PC14/PC15,已焊接但未启用 RTC)
已启用外设(4 个) GPIO, IWDG, USART1, UART4(+ RCC 系统时钟、SYS 调试接口)
未启用外设 ADC / DAC / CAN / TIM / RTC / DMA(P02 为纯继电器+DI 模块,无此类需求)

2. Clock Configuration(时钟树)

                    ┌──────────────────────────────────────────────┐
 HSE(8MHz)─┬─/1──►│ PLL (×9) ──► SYSCLK = 72MHz                 │
           │       │         ├─→ HCLK  = 72MHz (AHB)             │
           │       │         ├─→ APB1  = 36MHz (÷2)             │
           │       │         │   └─→ APB1 Timer = 72MHz (×2)    │
           │       │         └─→ APB2  = 72MHz                   │
           │       │          (无 ADC,无需 ADC 预分频)           │
 LSE(32.768kHz)─►│ ○──► (PC14/PC15 已配置,RTC 未启用)          │
           └───────┴──────────────────────────────────────────────┘
参数 备注
HSE Source Crystal/Ceramic Resonator (PD0/PD1) 8MHz 外部晶振
PLL Source HSE
PLLMUL ×9 (RCC_PLL_MUL9) 8×9 = 72MHz
SYSCLK Source PLLCLK
AHB Prescaler (/1) 72MHz HCLK
APB1 Prescaler (/2) 36MHz APB1 peripheral clock
APB1 Timer Prescaler (×2) 72MHz USART1/UART4 时钟源
APB2 Prescaler (/1) 72MHz APB2 peripheral clock
LSE Source Crystal/Ceramic Resonator (PC14/PC15) 32.768kHz,引脚已配置;P02 未启用 RTC

3. Pinout & GPIO 引脚分配(完整)

来源:.ioc + 生成的 main.h / gpio.c

3.1 通信类

标签 引脚 复用功能 方向 上拉/下拉 默认输出 说明
USART1_TX PA9 USART1_TX 输出 RS485 发送
USART1_RX PA10 USART1_RX 输入 RS485 接收
RS485_DE PA8 GPIO_Output 输出 No pull-up Low RS485 DE/RE 方向控制(高=发送)
UART4_TX PC10 UART4_TX 输出 RS232 调试发送
UART4_RX PC11 UART4_RX 输入 RS232 调试接收

3.2 继电器输出(4 路,低电平有效)

标签 引脚 复用功能 方向 默认输出 说明
RELAY1 PB6 GPIO_Output 输出 High 继电器1(低有效:RESET/低=吸合 ON,SET/高=安全断开 OFF;上电默认 High=安全态)
RELAY2 PB7 GPIO_Output 输出 High 继电器2
RELAY3 PB8 GPIO_Output 输出 High 继电器3
RELAY4 PB9 GPIO_Output 输出 High 继电器4

3.3 数字输入(DI / 光耦,4 路)

标签 引脚 复用功能 方向 上拉/下拉 说明
DI1 PB0 GPIO_Input 输入 Pull-up 光耦输入1(有效=外部短接 GND→低电平)
DI2 PB1 GPIO_Input 输入 Pull-up 光耦输入2
DI3 PB10 GPIO_Input 输入 Pull-up 光耦输入3
DI4 PB11 GPIO_Input 输入 Pull-up 光耦输入4

3.4 按键(3 路用户键)

标签 引脚 复用功能 方向 上拉/下拉 说明
KEY1 PB3 GPIO_Input 输入 Pull-up 用户按键1(按下=低)— Serial Wire 已释放此引脚 ✓
KEY2 PB4 GPIO_Input 输入 Pull-up 用户按键2(按下=低)— Serial Wire 已释放此引脚 ✓
KEY3 PB5 GPIO_Input 输入 Pull-up 用户按键3(按下=低)

注意(与 P05 差异):P02 的 PB5 是普通用户键 KEY3,并非 P05 的硬件急停 E_STOP。P02 无独立急停功能,安全保护由「通信故障安全」承担(见 §4.3 / 硬件配置表 §4)。

3.5 状态指示灯(LED,4 路单功能,低有效)

标签 引脚 复用功能 方向 默认输出 语义(系列对齐)
STATUS_LED (RUN) PC6 GPIO_Output 输出 High 运行指示 RUN(1Hz 慢闪,永不改变)
COMM_LED PC7 GPIO_Output 输出 High COMM(收到有效 Modbus 帧脉冲 50ms)
FAULT_LED PC8 GPIO_Output 输出 High FAULT(故障安全触发时快闪 10Hz)
RS232_LED PC9 GPIO_Output 输出 High RS232(收到串口字符脉冲 50ms)

已确认:CubeMX 标签 STATUS_LED/COMM_LED/FAULT_LED/RS232_LED 映射到 PC6~PC9,固件 bsp_led.c 实现为四盏单功能 LED,低电平有效(亮=GPIO_LOW)。语义已固化,非"建议"。
⚠️ 抗重生成提醒:若用 CubeMX 重新 Generate Code,务必在 Pinout 中把 PC6/PC7/PC8/PC9 也设为 GPIO_Output,否则生成代码会覆盖 main.h 的引脚宏(代码注释已注明)。

3.6 其他系统引脚

引脚 功能 说明
PD0/PD1 HSE OSC_IN/OUT 8MHz 主晶振
PC14/PC15 LSE OSC_IN/OUT 32.768kHz 晶振(引脚已配置,RTC 未启用)
NRST 系统复位
PA13/PA14 SWDIO/SWCLK Serial Wire 调试(SYS=Serial Wire ✓)
VP_IWDG_VS_IWDG 内部 IWDG 看门狗激活
VP_SYS_VS_Systick 内部 SysTick 时基

4. Peripheral Configuration(外设参数)

4.1 USART1(RS485 / Modbus RTU)

参数
Mode Asynchronous
Baud Rate CubeMX .ioc 配置 9600 Bits/s;运行时由 Flash 参数 BaudIndex(默认 0→9600)经 Modbus_Init() 实际应用
Word Length 8 Bits (including Parity)
Parity None
Stop Bits 1
Data Direction Receive and Transmit
Over Sampling 16 Samples
Hardware Flow Control Disable
NVIC USART1 global interrupt: Enabled, Preemption=0, SubPriority=0

⚠️ CubeMX 与运行时不一致的坑.ioc 中 USART1 BaudRate=9600,但生成 usart.c 模板里 huart1.Init.BaudRate=115200实际波特率由 Modbus_Init() 读取 Flash 参数 BaudIndexHAL_UART_Init 覆盖,出厂默认 BaudIndex=0 → 9600。若将来 CubeMX 重新生成代码,模板值 115200 会被再次写入,但运行时仍由 Flash 参数决定,不影响出厂默认 9600。RS485 波特率档位:0=9600 / 1=19200 / 2=38400 / 3=57600 / 4=115200。

4.2 UART4(RS232 调试口)

参数
Mode Asynchronous
Baud Rate 115200 Bits/s(固定,TTL 3.3V)
Word Length 8 Bits
Parity None
Stop Bits 1
Over Sampling 16 Samples
Data Direction Receive and Transmit
Hardware Flow Control Disable
NVIC UART4 global interrupt: Enabled, Preemption=0, SubPriority=0

4.3 IWDG(独立看门狗)

参数
Mode Activated
IWDG counter clock prescaler 64
IWDG down-counter reload value 3999
计算超时 ≈ 6.4 秒(LSI≈40kHz: 3999×64/40000≈6.4s)

与 P05 差异:P05 的 IWDG 超时≈2s(Prescaler=64, Reload=1250);P02 为 ≈6.4s(Reload=3999)。主循环每轮 HAL_IWDG_Refresh() 喂狗,死机约 6.4s 后自动复位。

4.4 NVIC 中断优先级分组

参数
Priority Group 4 bits for pre-emption(全抢占式)
Force DMA channels interrupts

已启用中断汇总

中断名称 使能 抢占优先级 子优先级
SysTick 15 0
HardFault / MemManage / BusFault / UsageFault / NMI ☑ 全部 0 0
USART1 global interrupt (RS485) 0 0
UART4 global interrupt (RS232) 0 0

中断优先级设计要点:最高优先级(0):SysTick(15)、HardFault 等系统异常、USART1/UART4;未使用的中断保持禁用。

4.5 Project Manager 设置

参数
Project Name P02_Relay_Controller_4Channels Relay Industrial Control Module
Target Toolchain MDK-ARM V5.32
Firmware Package STM32Cube FW_F1 V1.8.x
Keep User Code when regenerating Enabled ✅(必须!)
Heap Size 0x200 (512 bytes)
Stack Size 0x400 (1024 bytes)
Main Location Core/Src
Optimize Level -O2 (Optimize For speed)

5. 未使用的引脚(Unused GPIOs)

P02 使用 PB0PB11(DI/KEY/继电器)、PC6PC11(LED/RS232)、PA8~PA10(RS485)、PA13/14(SWD)、PD0/1(HSE)。其余引脚(如 PA07、PA11/12、PA15、PC05、PC12~15 中除 LED/LSE 外、PB12~15 等)在 .ioc 中多保留为默认(Analog/未配置)。这属于引脚富余,非配置错误。


6. 配置审计结论(是否符合要求)

✅ 符合要求的配置项(对标系列规范)

序号 检查项 结论 说明
C01 MCU 型号 STM32F103RCT6 LQFP64 256KB/48KB
C02 SYS = Serial Wire(释放 JTAG) PB3/PB4/PB5 可作 GPIO(KEY1/2/3)
C03 HSE 8MHz Crystal PD0/PD1
C04 PLL ×9 = 72MHz 主频正确
C05 USART1(RS485) PA9/TX PA10/RX 引脚正确
C06 RS485_DE = PA8 GPIO_Output 方向控制引脚正确,默认 Low(接收态)
C07 UART4(RS232) PC10/TX PC11/RX 引脚正确
C08 UART4 波特率 115200 调试口固定波特率
C09 4 路继电器 PB6~PB9 低电平有效,上电默认全断开
C10 4 路 DI (PB0/1/10/11) 统一 Pull-up,光耦隔离 5~24V
C11 4 路 LED (PC6~PC9) 单功能、低有效
C12 IWDG 已启用 硬看门狗保护,≈6.4s
C13 KeepUserCode=true 重生成不覆盖用户代码
C14 NVIC 优先级分组 4-bit preemption 全抢占式
C15 故障安全默认开启 FailSafeEn=1, FailSafeSec=10

✅ 设计决策确认结论(已落地到固件)

编号 决策点 落地结果 固件位置
q-1 RS485 默认波特率 9600(索引 0),可配 19200/38400/57600/115200 flash_param DEFAULT_BAUD_INDEX=0
q-2 继电器路数 4 路(PB6~PB9) bsp_relay.c RELAY_CH_NUM=4
q-3 继电器电平逻辑 低电平有效(RESET/低=吸合 ON,SET/高=安全断开 OFF) bsp_relay.c BSP_Relay_Set
q-4 DI 上下拉 统一 Pull-up gpio.c DI1~4 全 Pull-up
q-5 IWDG 超时 ≈6.4s(Prescaler=64, Reload=3999) iwdg.c MX_IWDG_Init
q-6 LED 语义 RUN/COMM/FAULT/RS232(四盏单功能,低有效) bsp_led.c / main.h
q-7 故障安全 默认开启(FailSafeEn=1, FailSafeSec=10) system_app.c Modbus_CheckFailSafe
q-8 本地可覆盖远程安全态 允许(RS232 调试口可在故障安全态下手动操作继电器) rs232_shell.c Cmd_Relay(设计权衡,见调试文档 F4)

上表设计决策由固件/代码库已落地确认,与产品说明书、通讯协议文档一致。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐