STM32CubeMX Config Skill & MCP
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
STM32CubeMX Config Skill & MCP
中文 | English
给 AI 编程助手用的 STM32CubeMX 配置工具包。助手可以查询器件的定义与参数可行域,写一份描述目标配置的
JSON,由工具离线编译成 STM32CubeMX 1.x 能直接加载的 .ioc;需要代码时,再让 CubeMX 生成工程。
本工具集面向 STM32CubeMX 1。STM32CubeMX2 使用新的软件编排, 并提供可靠的 CLI 指令,可以直接使用;可以前往 ST 的 STM32Cube for Agentic AI 工具栈了解。
为什么不采用直接编排 CubeMX CLI 指令的方案
CubeMX 的CLI机制有一系列问题。
慢:每次重新启动 CubeMX 的批处理都有启动开销,十几秒起步。
命令之间有状态依赖,顺序也成了依赖:后一条命令的工作由前一条命令改变的状态决定。 这条依赖链很难显式建模。
失败不报失败:有些命令失败了,进程退出码仍是 0。
会悄悄丢配置:保存
.ioc时,CubeMX 按内存模型重写整个文件,只保存认识的正确的键名,不认识的键名不会报错。
案例:同一个参数,前一步没做,这一步就写不进去。
set ip parameters USART1 BaudRate 115200
set mode USART1 Asynchronous
set ip parameters USART1 BaudRate 115200第一条直接运行会失败:USART1 还没选工作模式,这时候它的参数表里没有 BaudRate 这一项。而CLI不会在设置ip参数时自动启动UART1的模式。 第二条把模式定下来,第三条同样的参数、同样的值就写进去了。 第一次用的人很容易以为"命令写错了",其实错的是顺序。
本工具换一个做法:配置的"目标状态"全部写进 JSON。工具离线算出该写哪些键,一次编出 .ioc。
CubeMX CLI只做两件事:加载这份文件、生成代码。
Related MCP server: stm32cubemx-mcp
包里有什么
cubemx1.cmd / .sh 启动器(Windows / Linux、macOS、Git Bash)
skills/ 给 AI 助手读的说明书(SKILL.md + references/)
mcp/ 程序:离线编译器 + 查询器 + MCP 外壳
docs/PROTOCOL.md 目标 JSON 协议(怎么写那份 JSON)
README.md / LICENSE装之前需要什么
Python 3.8 以上(只用标准库,不用 pip 装东西);
本机已安装 STM32CubeMX 1.x;
一台电脑一份的本机配置
~/.cubemx1/machine.json:
{
"cubemx_home": "<CubeMX 安装目录>",
"repository": "<固件包仓库目录>"
}repository 只在生成代码时需要。缺配置时会直接报"该填什么",不会猜路径。
快速开始
先查,再写,再编译。参数名、引脚、取值都从探测结果里抄,别凭记忆写。
1. 查这颗芯片有哪些外设
cubemx1 probe peripherals --device "STM32F103C(8-B)Tx"device STM32F103C(8-B)Tx
peripherals 27
ADC1 ADC-aditf_v2_5F1_Cube peripheral
ADC2 ADC-aditf_v2_5F1_Cube peripheral
CAN CAN-bxcan1_v1_1_F1_Cube peripheral
CRC CRC-integtest1_v1_0 service
DMA DMA-STM32F103G_dma_v1_0 service
FATFS FATFS-v0.1.0_Cube middleware
FREERTOS FREERTOS-v8.0.0_Cube middleware
GPIO GPIO-STM32F103x8_gpio_v1_0 service
I2C1 I2C-i2c1_v1_5_Cube peripheral
I2C2 I2C-i2c1_v1_5_Cube peripheral
IWDG IWDG-iwdg1_v1_1 service
NVIC NVIC-STM32F103G service
RCC RCC-STM32F102_rcc_v1_0 peripheral
RTC RTC-rtc1_v1_1_Cube peripheral
SPI1 SPI-spi2_v1_4_Cube peripheral
SPI2 SPI-spi2_v1_4_Cube peripheral
SYS SYS-STM32F10x_sys_v1_0 peripheral
TIM1 TIM1_8F1-gptimer2_v1_x_Cube peripheral
TIM2 TIM1_8F1-gptimer2_v1_x_Cube peripheral
TIM3 TIM1_8F1-gptimer2_v1_x_Cube peripheral
TIM4 TIM1_8F1-gptimer2_v1_x_Cube peripheral
USART1 USART-sci2_v1_1_Cube peripheral
USART2 USART-sci2_v1_1_Cube peripheral
USART3 USART-sci2_v1_1_Cube peripheral
USB USB-usb1_v1_1_Cube peripheral
USB_DEVICE USB_DEVICE-v2.0_Cube middleware
WWDG WWDG-wwdg1_v1_0 serviceinstance 一列就是 JSON 里 ips[].instance 要写的东西。
2. 查要用的外设:参数、取值、候选引脚
cubemx1 probe describe --ip USART1 --device "STM32F103C(8-B)Tx"instance USART1 (USART)
type peripheral
source <CubeMX 安装目录>/db/mcu/IP/USART-sci2_v1_1_Cube_Modes.xml
modes enabled []; possible []
param Instance ? default USART$Index type ?
param VirtualMode list default VM_ASYNC values VM_ASYNC, VM_SYNC, VM_IRDA, VM_SMARTCARD
param VirtualClockMode list default VM_SYNC values VM_SYNC, VM_SMARTCARD
param BaudRate integer default 115200 range 110..10500000
param WordLength list default WORDLENGTH_8B values WORDLENGTH_8B, WORDLENGTH_9B
param UsartWordLength list default USART_WORDLENGTH_8B values USART_WORDLENGTH_8B
param IrdaWordLength list default IRDA_WORDLENGTH_8B values IRDA_WORDLENGTH_8B
param SmartCardWordLength list default SMARTCARD_WORDLENGTH_9B values SMARTCARD_WORDLENGTH_9B
param UartWordLength list default UART_WORDLENGTH_8B values UART_WORDLENGTH_8B
param StopBits list default STOPBITS_1 values STOPBITS_1, STOPBITS_2, STOPBITS_0_5, STOPBITS_1_5
param UsartStopBits list default USART_STOPBITS_2 values USART_STOPBITS_2
param UartStopBits list default UART_STOPBITS_1 values UART_STOPBITS_1
param SmartCardStopBits list default SMARTCARD_STOPBITS_1_5 values SMARTCARD_STOPBITS_1_5
param Parity list default PARITY_EVEN values PARITY_EVEN, PARITY_ODD
param UsartParity not applicable
param IrdaParity not applicable
param SmartCardParity list default SMARTCARD_PARITY_EVEN type list
param UartParity not applicable
param Mode list default MODE_TX_RX values MODE_TX_RX, MODE_RX, MODE_TX
param UsartMode not applicable
param SmartCardMode not applicable
param IrdaMode not applicable
param UartMode not applicable
param HwFlowCtl list default UART_HWCONTROL_NONE values UART_HWCONTROL_NONE
param OverSampling list default null values null
param CLKPolarity list default SMARTCARD_POLARITY_LOW values SMARTCARD_POLARITY_LOW, SMARTCARD_POLARITY_HIGH
param CLKPhase list default SMARTCARD_PHASE_1EDGE values SMARTCARD_PHASE_1EDGE, SMARTCARD_PHASE_2EDGE
param CLKLastBit list default SMARTCARD_LASTBIT_DISABLE values SMARTCARD_LASTBIT_DISABLE, SMARTCARD_LASTBIT_ENABLE
param IrDAMode list default IRDA_POWERMODE_NORMAL values IRDA_POWERMODE_LOWPOWER, IRDA_POWERMODE_NORMAL
param Prescaler integer default 1 range 1..1
param CalculateSpeed string default 5000000 type string
param NACKState list default SMARTCARD_NACK_DISABLE values SMARTCARD_NACK_DISABLE, SMARTCARD_NACK_ENABLE
param GuardTime integer default 0 range 0..255
param WakeUpMethode list default UART_WAKEUPMETHOD_IDLELINE values UART_WAKEUPMETHOD_IDLELINE, UART_WAKEUPMETHOD_ADDRESSMARK
param Address integer default 0 range 0..15
param BreakDetectLength list default UART_LINBREAKDETECTLENGTH_10B values UART_LINBREAKDETECTLENGTH_10B, UART_LINBREAKDETECTLENGTH_11Bsource 那行本来是这台机器的安装路径,这里换成了占位符。integer 看 range,
list 看 values;写 not applicable 说明当前模式用不到这条。
再看引脚:
cubemx1 probe pins --ip USART1 --device "STM32F103C(8-B)Tx"device STM32F103C(8-B)Tx
instance USART1 (USART)
pins 7 signals 5
one pin, many signals 0
signal, many pins 2
USART1_RX PA10, PB7
USART1_TX PA9, PB6
modes 11
Asynchronous required 2 ambiguous 2 conflicts 0 missing 0
Synchronous required 3 ambiguous 2 conflicts 0 missing 0
Half_duplex(single_wire_mode) required 1 ambiguous 1 conflicts 0 missing 0
Multiprocessor_communication required 2 ambiguous 2 conflicts 0 missing 0
IrDA required 2 ambiguous 2 conflicts 0 missing 0
LIN required 2 ambiguous 2 conflicts 0 missing 0
SmartCard required 1 ambiguous 1 conflicts 0 missing 0
SmartCard_With_Clock required 2 ambiguous 1 conflicts 0 missing 0
CTS_Only required 1 ambiguous 0 conflicts 0 missing 0
RTS_Only required 1 ambiguous 0 conflicts 0 missing 0
CTS_RTS required 2 ambiguous 0 conflicts 0 missing 0USART1 异步要 TX 和 RX 两根脚,两个信号都各有两根候选脚,所以 pins[] 里得自己挑好。
挑完是这样:
3. 写 JSON
{
"contract": "cubemx1.ioc/1",
"device": {"refname": "STM32F103C(8-B)Tx"},
"project": {"name": "demo", "output_dir": "D:/projects/demo", "toolchain": "CMake"},
"pins": [{"pin": "PA9", "signal": "USART1_TX"},
{"pin": "PA10", "signal": "USART1_RX"}],
"ips": [{"instance": "USART1", "mode": "Asynchronous",
"params": {"BaudRate": "115200"}}],
"nvic": {"vectors": [{"irq": "USART1_IRQn", "priority": 1}]}
}4. 编译
cubemx1 ioc build target.json这一步不启动 CubeMX,几秒钟。输出里会写清楚编出了哪个 .ioc、一共多少键、
补了哪些默认值、钳了哪些值。
5. 生成工程
需要本机装着 CubeMX 和对应家族的固件包:
cubemx1 ioc generate 工程.ioc它会真的跑一次生成,然后检查启动文件在不在、工程有没有引用它、关键数值有没有进代码。
更多完整案例(外设清单与探测、时钟、板卡、DMA、RTOS、改现有工程、时钟拓扑探测)见 工作流程。
先看清时钟树,再写时钟参数
目标频率解不出来,或要在 JSON 里直接写 RCC 参数时,先查拓扑。查询器只读:不求解频率,不启动 CubeMX。
cubemx1 probe clock --device "STM32H750VBTx" --view upstream --output HCLKFreq_Value返回里有:每个元件的类型与参数绑定、全部上游路径、MUX 的每个分支、小数倍频的分数输入。
看懂了再写 clock.params。MCP 里用 cubemx1_probe_describe 的 kind=clock。
求解器也能单独跑,只打印结果、不写文件:
cubemx1 clock solve --device "STM32F407Z(E-G)Tx" --target HCLKFreq_Value=168输出最终 RCC 参数、用这些参数独立重算的校验值,以及每个目标的求解说明。确认后再写进目标 JSON。
给 AI 助手用(MCP)
mcp/mcp.json 是 MCP 服务的打包清单。工具面是六条:
工具 | 干什么 |
| 目标 JSON → |
| 开发/验收用对拍:加载 + 另存 + 比键值(发布使用不需要) |
| 原生生成 CMake 工程并检查产物 |
| 开发/验收用:把现有 |
| 离线查询:IP 定义/适用定义( |
| 看后台进程与会话状态 |
支持范围
由于采用基于xml解析的开发方案,所有在xml内的IP均可配置编辑。其中以下内容经过测试:
引脚与 GPIO、USART、TIM、SPI、I2C、ADC、FMC、DMA、时钟、NVIC、FreeRTOS、USB 设备类、 用户常量、LWIP / FATFS / USB HOST。均测试多个家族的多个芯片
板卡方面,board 段可以直接套 ST 官方板卡的 seed,也可以用已经展开的配置;
probe board 能查板卡用的哪颗 MCU、seed 里配了什么、有没有原生 BSP 定义。
板卡带 BSP 时,ips 里可以写板级实例和组件参数(比如 LD1、VCP、BUTTON),
这些组件由 CubeMX 加载时展开成 MCU 配置。
Coming Soon:
双核 / TrustZone / 内存映射
X-CUBE 扩展包
基于 BSP 的自定义板卡信息注册
基于 BSP 的自定义驱动外部模块(外设与代码初始化)
许可
见 LICENSE。
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
Host any HTTP API as a standard MCP server; auto-distribute to 12+ mainstream agent platforms.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server that wraps STM32CubeMX CLI to let AI load .ioc projects, modify pin/peripheral configurations, generate HAL code, and export pinout tables.531 PyPI2MIT
- AlicenseAqualityBmaintenanceAn MCP server that enables AI agents to inspect, plan, validate, and apply STM32CubeMX .ioc configuration changes, and generate STM32CubeIDE projects, ensuring safe and testable embedded-system workflows.97MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets AI coding agents drive the full STM32 development loop—code generation, build, flash, debug, serial monitoring, and fault diagnosis—end to end via CubeIDE, CubeMX, CubeProgrammer, OpenOCD, and GDB.1MIT
- AlicenseAqualityCmaintenanceMCP server for debugging STM32 microcontrollers over ST-LINK using STM32CubeCLT tools (GDB, ST-LINK_gdbserver, STM32_Programmer_CLI) with session management, flashing, breakpoints, memory/register access, and expression evaluation.191GPL 3.0