STM32CubeMX CLI Operations
Environment Setup
CODEBLOCK0
Core Workflow
CODEBLOCK1
Step 1: Modify IOC File
Edit the .ioc file to add/modify peripheral configuration.
Key Configuration Sections:
- -
Mcu.IP0=XXX - Peripheral IP list, Mcu.IPNb is the count - INLINECODE3 - Pin list,
Mcu.PinsNb is the count - INLINECODE5 - Pin signal mapping
- INLINECODE6 - Initialization function list
Step 2: Generate Code
CODEBLOCK2
Step 3: Build Verification
CODEBLOCK3
CLI Command Reference
| Command | Purpose | Example |
|---|
| INLINECODE7 | Load IOC configuration | INLINECODE8 |
| INLINECODE9 |
Save IOC configuration |
config save /path/to/project.ioc |
|
project generate | Generate complete project |
project generate |
|
project toolchain <name> | Set toolchain |
project toolchain CMake |
|
project path <path> | Set project path |
project path /path/to/project |
|
project name <name> | Set project name |
project name MyProject |
|
load <mcu> | Load MCU |
load STM32F103C8Tx |
|
setDriver <IP> <HAL\|LL> | Set driver type |
setDriver ADC LL |
|
exit | Exit program |
exit |
Common Peripheral Configuration Templates
USART + DMA
See references/USART_DMA.md for detailed configuration
CODEBLOCK4
ADC Acquisition
CODEBLOCK5
TIM PWM
CODEBLOCK6
STM32F103C8T6 Resource Mapping
USART
| Peripheral | TX | RX | DMA TX | DMA RX |
|---|
| USART1 | PA9 | PA10 | DMA1Ch4 | DMA1Ch5 |
| USART2 |
PA2 | PA3 | DMA1
Ch7 | DMA1Ch6 |
| USART3 | PB10 | PB11 | DMA1
Ch2 | DMA1Ch3 |
ADC Channels
| Channel | Pin | Channel | Pin |
|---|
| IN0 | PA0 | IN5 | PA5 |
| IN1 |
PA1 | IN6 | PA6 |
| IN2 | PA2 | IN7 | PA7 |
| IN3 | PA3 | IN8 | PB0 |
| IN4 | PA4 | IN9 | PB1 |
TIM Channels
| Timer | CH1 | CH2 | CH3 | CH4 |
|---|
| TIM1 | PA8 | PA9 | PA10 | PA11 |
| TIM2 |
PA0/PA5/PA15 | PA1/PB3 | PA2 | PA3 |
| TIM3 | PA6/PB4 | PA7/PB5 | PB0 | PB1 |
| TIM4 | PB6 | PB7 | PB8 | PB9 |
Troubleshooting
Q1: CLI execution has no effect
Cause: Paths must be absolute
CODEBLOCK7
Q2: Generated code missing initialization functions
Cause:
functionlistsort does not include the corresponding function
CODEBLOCK8
Q3: Peripheral code not generated
Checklist:
- 1. Is IP in the
Mcu.IPx list? - Is
Mcu.IPNb count correct? - Is pin Signal configured?
Q4: DMA not associated
Solution: Enable peripheral DMA parameters
CODEBLOCK9
Quick Reference
CODEBLOCK10
References
STM32CubeMX CLI 操作
环境配置
bash
STM32CubeMX 路径(根据安装位置修改)
CUBEMX=/path/to/STM32CubeMX/STM32CubeMX
项目路径(根据实际项目调整)
PROJECT_DIR=/path/to/your/project
IOC
FILE=$PROJECTDIR/your_project.ioc
SCRIPT
FILE=$PROJECTDIR/cube_headless.txt
核心工作流程
- 1. 修改 IOC 配置文件 → 2. 运行 CLI 生成代码 → 3. CMake 构建验证
步骤 1:修改 IOC 文件
编辑 .ioc 文件以添加/修改外设配置。
关键配置区域:
- - Mcu.IP0=XXX - 外设 IP 列表,Mcu.IPNb 为数量
- Mcu.Pin0=PAx - 引脚列表,Mcu.PinsNb 为数量
- XXX.Signal=YYY - 引脚信号映射
- ProjectManager.functionlistsort - 初始化函数列表
步骤 2:生成代码
bash
无头模式(推荐)
$CUBEMX -q $SCRIPT_FILE
脚本文件内容
cat > $SCRIPT_FILE << EOF
config load /path/to/your/project/your_project.ioc
project generate
exit
EOF
步骤 3:构建验证
bash
cd $PROJECT_DIR
rm -rf build/Debug
cmake --preset Debug
cmake --build build/Debug
CLI 命令参考
| 命令 | 用途 | 示例 |
|---|
| config load <路径> | 加载 IOC 配置 | config load /path/to/project.ioc |
| config save <路径> |
保存 IOC 配置 | config save /path/to/project.ioc |
| project generate | 生成完整项目 | project generate |
| project toolchain <名称> | 设置工具链 | project toolchain CMake |
| project path <路径> | 设置项目路径 | project path /path/to/project |
| project name <名称> | 设置项目名称 | project name MyProject |
| load
| 加载 MCU | load STM32F103C8Tx |
| setDriver | 设置驱动类型 | setDriver ADC LL |
| exit | 退出程序 | exit |
常用外设配置模板
USART + DMA
详细配置请参见 references/USART_DMA.md
ini
添加 IP
Mcu.IP6=USART2
Mcu.IPNb=7
引脚配置
PA2.Signal=USART2_TX
PA3.Signal=USART2_RX
USART2 参数
USART2.BaudRate=115200
USART2.Dmaenabledrx=1
USART2.Dmaenabledtx=1
DMA 配置
Dma.Request0=USART2_RX
Dma.Request1=USART2_TX
Dma.USART2RX.0.Instance=DMA1Channel6
Dma.USART2TX.1.Instance=DMA1Channel7
中断
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
ADC 采集
ini
添加 ADC1
Mcu.IP0=ADC1
ADC 配置
ADC1.Channel-1\#ChannelRegularConversion=ADCCHANNEL5
ADC1.Rank-1\#ChannelRegularConversion=1
ADC1.SamplingTime-1\#ChannelRegularConversion=ADCSAMPLETIME1CYCLE_5
ADC1.NbrOfConversionFlag=1
ADC1.master=1
引脚
PA5.Signal=ADCx_IN5
SH.ADCxIN5.0=ADC1IN5,IN5
TIM PWM
ini
TIM3 配置
TIM3.Channel-PWM\ Generation1\ CH1=PWM_CHANNEL1
TIM3.Channel-PWM\ Generation2\ CH2=PWM_CHANNEL2
TIM3.IPParametersWithoutCheck=Prescaler,Period
引脚
PA6.Signal=TIM3_CH1
PA7.Signal=TIM3_CH2
STM32F103C8T6 资源映射
USART
| 外设 | TX | RX | DMA TX | DMA RX |
|---|
| USART1 | PA9 | PA10 | DMA1Ch4 | DMA1Ch5 |
| USART2 |
PA2 | PA3 | DMA1Ch7 | DMA1Ch6 |
| USART3 | PB10 | PB11 | DMA1Ch2 | DMA1Ch3 |
ADC 通道
PA1 | IN6 | PA6 |
| IN2 | PA2 | IN7 | PA7 |
| IN3 | PA3 | IN8 | PB0 |
| IN4 | PA4 | IN9 | PB1 |
TIM 通道
| 定时器 | CH1 | CH2 | CH3 | CH4 |
|---|
| TIM1 | PA8 | PA9 | PA10 | PA11 |
| TIM2 |
PA0/PA5/PA15 | PA1/PB3 | PA2 | PA3 |
| TIM3 | PA6/PB4 | PA7/PB5 | PB0 | PB1 |
| TIM4 | PB6 | PB7 | PB8 | PB9 |
故障排除
Q1:CLI 执行无效果
原因:路径必须使用绝对路径
bash
错误
./STM32CubeMX -q script.txt
正确
/path/to/STM32CubeMX/STM32CubeMX -q /path/to/project/script.txt
Q2:生成的代码缺少初始化函数
原因:functionlistsort 未包含对应函数
ini
添加初始化函数
ProjectManager.functionlistsort=...,N-MXXXXInit-XXX-false-HAL-true
Q3:外设代码未生成
检查清单:
- 1. IP 是否在 Mcu.IPx 列表中?
- Mcu.IPNb 数量是否正确?
- 引脚 Signal 是否已配置?
Q4:DMA 未关联
解决方案:启用外设 DMA 参数
ini
USART2.Dmaenabledrx=1
USART2.Dmaenabledtx=1
快速参考
bash
完整工作流程
cd /path/to/your/project
1. 编辑 IOC 文件
2. 生成代码
/path/to/STM32CubeMX/STM32CubeMX -q cube_headless.txt
3. 构建
cmake --preset Debug && cmake --build build/Debug
4. 检查大小
arm-none-eabi-size build/Debug/your_project.elf
参考资料