AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Stm32 Keil

skill-54xkeee-agent-diansai-skill-stm32-keil · by 54xkeee

Use when Codex needs to generate, review, validate, flash, debug, or diagnose STM32 Keil/CubeMX projects, especially .ioc files, HAL peripheral configuration, ST-Link/OpenOCD/CubeProgrammer flashing, and serial console workflows.

No reviews yet
0 installs
21 views
0.0% view→install

Install

$ agentstack add skill-54xkeee-agent-diansai-skill-stm32-keil

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-54xkeee-agent-diansai-skill-stm32-keil)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Stm32 Keil? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

STM32 Keil Skill

AI 工作规范文档。工具层(Python)保证格式正确,AI 负责意图理解和问答。


工作流程

1. 解析需求  → 识别外设列表、引脚意图
2. 问答补全  → 有缺失必填项时,一次性列出 + 默认值,等用户确认
3. 生成 .ioc → ioc_writer.py(mcu, config_dict) → project.ioc
4. 自动验证  → ioc_parser.py 回读 + check_project.py 冲突检查
5. 用户确认  → 提示用CubeMX打开验证无报错,确认后继续

引脚复用规则(冲突决策树)

STM32F103 常见复用冲突,遇到时不问用户,直接报警告 + 推荐替代

| 引脚 | 复用1 | 复用2 | 推荐 | |------|-------|-------|------| | PA6 | TIM3CH1(编码器) | SPI1MISO | 编码器用PA6时,SPI1改用SPI2 | | PA7 | TIM3CH2(编码器) | SPI1MOSI | 同上 | | PA9 | TIM1CH2(PWM) | USART1TX | PWM用PA9时,调试串口改USART3(PB10) | | PA10 | TIM1CH3 | USART1RX | 同上 | | PB6 | I2C1SCL | TIM4CH1 | I2C用PB6时,TIM4 PWM改CH3(PB8)/CH4(PB9) | | PB7 | I2C1SDA | TIM4CH2 | 同上 |


外设配置必填项

每类外设 AI 必须确认以下参数后才能生成 .ioc:

TIM(PWM 输出)

  • channel:通道号(CH1/CH2/CH3/CH4)
  • pin:对应引脚(从下表查,唯一)
  • freq_hz:PWM 频率(默认 10000)
  • periodprescaler 由工具根据 sysclk=72MHzfreq_hz 自动计算

TIM(编码器)

  • timer:TIM2 或 TIM3(TIM1/TIM4 不支持编码器模式)
  • ch1_pin / ch2_pin:固定映射,无需问用户(见下表)

ADC

  • channels:通道号列表(IN0~IN15)
  • dma:是否启用 DMA(默认 true,超过 2 路时强制 true)
  • 采样时间默认 ADC_SAMPLETIME_71CYCLES_5,不问用户

I2C

  • bus:I2C1 或 I2C2
  • speed_hz:默认 100000,不问用户
  • 不需要填从机地址(地址是代码层的事,.ioc 不管)

UART

  • instance:USART1/2/3
  • baudrate:默认 115200,不问用户

GPIO

  • pin:必须用户指定(自由GPIO没有固定映射)
  • direction:output / input
  • pull:输入时默认 PULLUP

固定引脚映射表(AI 自动确认,不问用户)

| 外设 | 信号 | 引脚 | 备注 | |------|------|------|------| | TIM1CH1 | PWM | PA8 | 唯一映射 | | TIM1CH2 | PWM | PA9 | 唯一映射(注意与USART1TX冲突) | | TIM1CH3 | PWM | PA10 | | | TIM1CH4 | PWM | PA11 | | | TIM2CH1 | 编码器A | PA0 | PA0 = PA0-WKUP,ioc写法特殊 | | TIM2CH2 | 编码器B | PA1 | | | TIM3CH1 | 编码器A | PA6 | | | TIM3CH2 | 编码器B | PA7 | | | TIM4CH1 | PWM | PB6 | 与I2C1SCL冲突 | | TIM4CH2 | PWM | PB7 | 与I2C1SDA冲突 | | TIM4CH3 | PWM | PB8 | | | TIM4CH4 | PWM | PB9 | | | I2C1SCL | I2C | PB6 | | | I2C1SDA | I2C | PB7 | | | I2C2SCL | I2C | PB10 | 与USART3TX冲突 | | I2C2SDA | I2C | PB11 | 与USART3RX冲突 | | USART1TX | UART | PA9 | 与TIM1CH2冲突 | | USART1RX | UART | PA10 | | | USART2TX | UART | PA2 | | | USART2RX | UART | PA3 | | | USART3TX | UART | PB10 | | | USART3RX | UART | PB11 | | | ADC1IN8 | ADC | PB0 | | | ADC1IN9 | ADC | PB1 | | | ADC1IN10 | ADC | PC0 | | | ADC1IN11 | ADC | PC1 | | | ADC1IN12 | ADC | PC2 | | | ADC1IN13 | ADC | PC3 | | | ADC1IN14 | ADC | PC4 | | | ADC1IN15 | ADC | PC5 | |


易错点清单

  1. PA0 的 .ioc 写法:信号名必须用 S_TIM2_CH1_ETR,引脚名写 PA0-WKUP,不是 PA0
  2. TIM1 是高级定时器:需要额外写 RepetitionCounter=0;PWM 生成对应的 SH 块是 SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
  3. TB6612 STBY 引脚:必须初始化为高电平(GPIO_PIN_SET),否则电机不工作
  4. DMA 通道固定映射(F103):ADC1 → DMA1Channel1,USART3TX → DMA1Channel2,USART3RX → DMA1_Channel3
  5. TIM4 作调度中断:不需要任何通道,只需 TIM4 基础计时器配置 + NVIC 中断使能;VP 虚拟引脚必须写 VP_TIM4_VS_ClockSourceINT
  6. ADC 的 Rank 字段:每个通道必须有对应的 Rank-N 字段(从1开始),缺失会导致 CubeMX 打开报错
  7. **SH. 共享信号块*:所有 TIM 通道和 ADC 通道都需要对应的 SH.* 块,AI 经常遗漏这部分
  8. NVIC 格式:必须用 true\:priority\:subpriority\:false\:false\:true\:... 格式,不是简单的布尔值

问答策略

何时问用户

| 情况 | 处理 | |------|------| | 自由 GPIO 引脚未指定(蜂鸣器/LED/方向控制) | 必须问,无法推断 | | 总线类型不确定(灰度传感器 ADC 还是 I2C) | 必须问 | | 同一引脚被两个功能争用 | 不问,报警告 + 推荐替代 | | 外设参数有合理默认值(PWM频率/I2C速度/波特率) | 自动使用默认值,写入 assumptions | | 外设参数影响正确性且无默认值(ADC通道列表) | 必须问 |

问答格式

一次性列出所有缺失项,不要逐个问:

需要确认以下信息才能生成 .ioc:

1. 蜂鸣器接哪个引脚?(如 PB12)
2. LED 接哪个引脚?(如 PB13)
3. 电机方向控制:AIN1/AIN2/BIN1/BIN2 接哪四个引脚?
4. TB6612 STBY 接哪个引脚?

以下参数已使用默认值,如需修改请说明:
- PWM 频率:20kHz(TIM1,Period=3599)
- 编码器模式:TI12(四倍频)
- I2C 速度:100kHz
- 调试串口:115200

验证步骤

自动验证(iocparser.py + checkproject.py)

  • 引脚无重复分配
  • 所有 TIM 通道有对应 SH.* 块
  • ADC 通道有对应 Rank 字段
  • DMA 通道映射合法

手动验证(必须用户执行)

  1. 用 STM32CubeMX 6.x 打开生成的 .ioc
  2. 确认无报错弹窗
  3. 检查引脚视图,确认引脚分配符合预期
  4. Generate Code,确认 main.c 中初始化函数齐全

CubeMX CLI 说明

CubeMX 6.x 的 -q headless 模式不可靠

  • 在无显示器环境(CI/SSH)可能静默失败
  • 不建议在 skill 流程中依赖它做自动代码生成
  • 可以用它做 .ioc 格式验证(打开不报错即为合法)

.ioc 文件格式速查

格式为 INI key=value,大小写敏感。关键规则:

# MCU 信息
Mcu.UserName=STM32F103RCTx
Mcu.CPN=STM32F103RCT6
Mcu.Name=STM32F103R(C-D-E)Tx     # CubeMX 内部名,不同于 UserName

# 引脚信号(注意 PA0 的特殊写法)
PA0-WKUP.Signal=S_TIM2_CH1_ETR
PA0-WKUP.GPIO_Label=ENC_L_A

# 共享信号块(TIM/ADC 必须有)
SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
SH.S_TIM1_CH1.ConfNb=1

# NVIC 格式
NVIC.TIM4_IRQn=true\:1\:0\:false\:false\:true\:true\:true\:true

# 虚拟引脚(每个用到 ClockSource 的 TIM 都需要)
VP_TIM4_VS_ClockSourceINT.Mode=Internal
VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.