函数
芯片模板中可用的 API 函数,按外设分类。
GPIO API
所有 GPIO 函数通过 global.GPIO.{函数名}() 或 GPIO.{函数名}() 调用。
引脚管理
headPeripheralPinAf(pin, af)
手动选择引脚的复用功能。
- pin: 引脚对象
{ name, port, pin, af } - af: 复用功能对象
{ name, value }
当 af.name === 'Reset_State' 时从 GPIO 表中删除该引脚。如果是唯一复用功能,删除原有绑定后更新。
auto_set_pins(target, name)
系统自动调用的引脚管理函数,函数名不可修改。
- target:
true启用 → 自动添加空闲引脚;false禁用 → 删除未锁定引脚 - name: 复用功能名称,如
'USART1_TX'
addPinByAlternate(alternate)
根据复用功能自动查找空闲引脚并添加到 GPIO 表。
- 过滤系统引脚(NRST、BOOT0、SWDIO、SWCLK)
- 按 port 和 num 排序后选择
deletePinByName(pinName)
根据引脚名称删除引脚。pinName 如 'PA0'。
updatePinByAlternate(pin, alternate)
更新引脚的复用功能,标记为 _locked: true。
引脚查询
bindByAlternate(alternate)
判断引脚是否已绑定该复用功能。返回 true/false。
get_gpios_by_af(alternate)
根据复用功能名获取引脚对象数组。支持 'TIM${num}_CH1' 模式匹配。
数据获取
get_ip_gpios(gpioTypes)
获取 GPIO 初始化数据,是代码生成的核心函数。
- gpioTypes: 类型过滤数组,如
['USART1', 'EVENTOUT', 'IR', 'MCO']
返回:
{
has_exti: boolean, // 是否包含 EXTI 中断
has_gpio: boolean, // 是否有 GPIO 引脚
ports: string[], // 使用的端口列表
pins: array, // 合并后的引脚配置
pins_des: array, // 引脚描述(用于注释)
resetPins: array, // 需复位的引脚
setPins: array // 需置位的引脚
}
内部流程:过滤 → 描述生成 → PORT 分组 → 同配置合并 → EXTI 检测 → 初始化数据生成。
get_gpio_head()
返回 GPIO 表格表头定义,包含 name、mode、speed、level、alternate 列。
参数映射
set_gpio_define_map(defineMap, firmware, pins)
将 UI 参数映射为特定固件的宏定义。
- defineMap: 合并后的 define 映射表
- firmware:
'std'|'hal'|'ll' - pins: 引脚数组
其他
get_peripheral_group()
获取外设所属分组。
on__change(params)
配置变化时的回调。params = { id, value, oldValue, path }。path 格式如 'USART1.Parameter.BaudRate'。
DMA API
通过 DMA.{函数名}() 调用。
enabled() → boolean
DMA 使能判断,返回 true。
has_ip_dma(instance) → boolean
检查指定外设实例是否有 DMA 能力(根据 dma.cjs 映射)。
get_ip_dma_ui(instance)
为外设生成 DMA 面板 UI,自动包含该外设可用的 DMA 请求行。
getDMA(ip) → array
获取外设已启用的 DMA 配置(channel 不为空且不为 'Disable')。
get_ip_dmas(ip, defineMap) → array
获取 DMA 配置并将参数映射为固件宏。返回数组每项包含 channel、priority、direction、mode、periph_inc、memory_inc、def(固件宏映射)。
get_mem_dmas() → object
获取 MemToMem 面板中已启用的 DMA 配置。
getTableDMAData(instance_name)
获取指定实例的 DMA 表格数据。
getDMADirectionOptions(type)
获取 DMA 传输方向选项。type 可选 'p2m'、'm2p'、'm2m'。
memToMemAdd({ defaultKey, defaultRow })
向 MemToMem 表格添加一行。
on__change(currentNode)
DMA 配置变化时的回调。
NVIC API
通过 NVIC.{函数名}() 调用。
enabled() → boolean
NVIC 使能判断,始终返回 true。
get_ip_nvic_rows(instance) → string[]
筛选指定外设实例的中断名数组(根据 nvic.cjs 的 ip_names)。
get_ip_nvic_ui_by_instance(instance)
为外设生成 NVIC 面板 UI,自动包含该外设的中断。如果外设有 DMA 配置,自动关联对应的 DMA 中断。
get_enabled_nvics(_global, instance) → array
收集所有外设已启用且不含 DMA 的中断配置。返回 [{ irqn, priority, subpriority, is_multiple }]。
get_ip_nvics(instance) → array
收集外设已启用的中断配置(含 DMA 中断)。
get_ip_nvic_ui(instance, ...rows)
生成外设 NVIC 面板的完整 UI 配置。自动处理 DMA 通道与 DMA 中断的对应关系(如 DMA1_Channel1 → DMA1_Channel1_IRQn)。
get_nvic_table_body()
返回 NVIC 表格体定义。
ADC API
通过 ADC.{函数名}() 调用。
enabled() → boolean
ADC 使能判断。
on__enableChange()
使能状态变化时的回调。
on__change()
配置变化时的回调。
RCU / 时钟 API
通过 RCU.{函数名}() 调用,定义在 ips/_CLOCK/ui/{系列}/data.cjs。
RCU.get_ip_clock(per) → number
根据外设名返回对应的总线时钟频率:
RCU.get_ip_clock('TIM1') // → CK_TIMER_GROUP1x.outclk
RCU.get_ip_clock('ADC1') // → CK_ADCx.outclk
RCU.get_ip_clock('SPI1') // → CK_PCLK2.outclk
RCU.get_ip_clock('USART1') // → CK_PCLK1.outclk
时钟源查询
RCU.clock_hse() // HXTAL 输出频率
RCU.clock_hsi() // IRC8M 输出频率
RCU.clock_lse() // LXTAL 输出频率
RCU.clock_lsi() // IRC40K 输出频率
状态查询
RCU.pll_enabled() // PLL 是否作为系统时钟
RCU.hse_enabled() // HSE 是否使能
RCU.lse_enabled() // LSE 是否使能
