模板
芯片模板目录结构
|---模板根目录
|---chip_config
|---系列
|---芯片(型号)
|---config.cjs(芯片信息配置文件)
|---constants.cjs(常量定义)
|---pins_parameter.cjs(引脚定义)
|---schema.cjs(外设配置界面定义)
|---platform
|---conf.cjs(平台信息配置文件)
|---clock.cjs(时钟定义)
|---constants.cjs(常量定义)
|---generator(工程生成相关)
|---build.js(工程生成入口)
|---handlebars_env.js(handlebars环境配置文件)
|---keil.js(keil工程生成相关)
|---iar.js(iar工程生成相关)
|---eide.js(eide工程生成相关)
|---gcc.js(gcc工程生成相关)
|---it.js
|---main.js
|---plugins(外设模板定义)
|---common(通用模板定义)
|---templates
|---外设
|---code(外设代码模板定义)
|---版本
|---xxx_init.cjs(生成初始化代码)
|---xxx_init_hal.c.hbs(hal代码模板)
|---xxx_init_ll.h.hbs(ll代码模板)
|---schema(外设配置界面定义)
|---版本
|---xxx_base.cjs(基础定义)
|---xxx_func.cjs(函数定义)
|---xxx_graphics.cjs(波形图)
|---xxx_schema.cjs(配置界面定义)
|---SDK
|---src
|---run.cjs
|---template.cjs
|---server.cjs
|---package.json
chip_config下文件
系列
clock.cjs
clock.cjs文件的格式如下:
module.exports = {
peripheral_type: 'CLOCK',
version: '系列',
}
- peripheral_type:表示使用的是哪个外设
- version:表示使用的外设版本
constants.cjs
constants.cjs文件的格式如下:
module.exports = {
// 常量定义
}
型号
config.cjs
config.cjs文件的格式如下:
module.exports = {
name: 'PT32L007F8X7',// 芯片名称
manufacturerId: 11,// 芯片厂商id
manufacturerShortName: 'PengpaiMicroelectronics',// 芯片厂商简称
seriesId: 68,// 芯片系列id
seriesName: 'PT32F007',// 芯片系列名称
frameWork: 'cortex-m0',// 芯片架构
status: 1,
version: 'V1.0.0',// 芯片版本
env: 1,
img: null,
peripheral: 'ADC,I2C,SPI,USART',
flashSize: '64',// 芯片flash大小
ramSize: '16',// 芯片ram大小
io: '18',// 芯片io数量
maxFreq: '48 MHz',// 芯片最大频率
packageName: 'QNF20',// 芯片封装
platform: 'MDK-ARM,EWARM',//支持的平台
firmware: 'HAL'
}
pins_parameter.cjs
该文件为芯片引脚定义,其数据结构请看 芯片引脚
schema.cjs
该文件定义了芯片的外设树,其数据结构请看 外设树
constants.cjs
该文件定义和系列下面的constants.cjs定义一样,系列下面的constants.cjs和型号下面constants.cjs会合并成一个文件
platform
conf.cjs
该文件定义了芯片工程的相关配置
module.exports = {
conf: {
ADC: {
HAL: {
dependencies: [
{
define: 'HAL_ADC_MODULE_ENABLED',
include: 'Serial_adc.h'
}
],
path: ['Drivers', 'Serial_FWLib'],
file: [
'../Drivers/Serial_FWLib/Src/Serial_adc.c'
]
},
LL: {
includes: [],
path: ['Drivers', 'Serial_LL_Driver'],
file: []
},
Children: [
{
Name: 'ADC',
Enable: false,
Default: false
},
{
Name: 'ADC0',
Enable: false,
Default: false
}
]
},
I2C: {
HAL: {
dependencies: [
{
define: 'HAL_I2C_MODULE_ENABLED',
include: 'Serial_i2c.h'
}
],
path: ['Drivers', 'Serial_FWLib'],
file: ['../Drivers/Serial_FWLib/Src/Serial_i2c.c']
},
LL: {
includes: [],
path: ['Drivers', 'Serial_LL_Driver'],
file: []
},
Children: [
{
Name: 'I2C',
Enable: false,
Default: false
}
]
},
SPI: {
HAL: {
dependencies: [
{
define: 'HAL_SPI_MODULE_ENABLED',
include: 'Serial_spi.h'
}
],
path: ['Drivers', 'Serial_FWLib'],
file: ['../Drivers/Serial_FWLib/Src/Serial_spi.c']
},
LL: {
includes: [],
path: ['Drivers', 'Serial_LL_Driver'],
file: []
},
Children: [
{
Name: 'SPI',
Enable: false,
Default: false
}
]
},
USART: {
HAL: {
dependencies: [
{
define: 'HAL_USART_MODULE_ENABLED',
include: 'Serial_uart.h'
}
],
path: ['Drivers', 'Serial_FWLib'],
file: [
'../Drivers/Serial_FWLib/Src/Serial_uart.c'
]
},
LL: {
includes: [],
path: ['Drivers', 'Serial_LL_Driver'],
file: []
},
Children: [
{
Name: 'USART0',
Enable: false,
Default: false
}
]
}
},
main: {
HAL: {
h_includes: ["serial_hal_conf.h"]
},
LL: {
h_includes: []
}
},
defines: ['Serial', 'USE_STDPERIPH_DRIVER'],
includePaths: [
`../Drivers/CMSIS/Include`,
`../Drivers/Serial_FWLib/inc`
],
startup: {
irqs: [
{irq: '0',number: 0,des: 'Reserved'},
{irq: '0',number: 1,des: 'Reserved'} ,
{irq: '0',number: 2,des: 'Reserved'},
{irq: 'IFMC_Handler',number: 3,des: 'IFMC_Handler'} ,
{irq: '0',number: 4,des: 'Reserved'},
{irq: 'EXTIA_Handler',number: 5,des: 'EXTIA Handler'} ,
{irq: 'EXTIB_Handler',number: 6,des: 'EXTIB Handler'} ,
{irq: 'EXTIC_Handler',number: 7,des: 'EXTIC Handler'} ,
{irq: 'EXTID_Handler',number: 8,des: 'EXTID Handler'} ,
{irq: '0',number: 9,des: 'Reserved'},
{irq: '0',number: 10,des: 'Reserved'},
{irq: '0',number: 11,des: 'Reserved'},
{irq: 'ADC_Handler',number: 12,des: 'ADC Handler'} ,
{irq: 'TIM1_Handler',number: 13,des: 'TIM1 Handler'} ,
{irq: '0',number: 14,des: 'Reserved'},
{irq: 'TIM4_Handler',number: 15,des: 'TIM4 Handler'} ,
{irq: 'TIM3_Handler',number: 16,des: 'TIM3 Handler'},
{irq: 'TIM2_Handler',number: 17,des: 'TIM2 Handler'},
{irq: '0',number: 18,des: 'Reserved'},
{irq: '0',number: 19,des: 'Reserved'},
{irq: 'PVD_Handler',number: 20,des: 'PVD Handler'},
{irq: '0',number: 21,des: 'Reserved'},
{irq: '0',number: 22,des: 'Reserved'},
{irq: 'I2C_Handler',number: 23,des: 'I2C Handler'},
{irq: '0',number: 24,des: 'Reserved'},
{irq: 'SPI_Handler',number: 25,des: 'SPI Handler'},
{irq: '0',number: 26,des: 'Reserved'},
{irq: 'UART0_Handler',number: 27,des: 'UART0 Handler'},
{irq: 'UART1_Handler',number: 28,des: 'UART1 Handler'},
{irq: '0',number: 29,des: 'Reserved'},
{irq: '0', number: 30, des: 'Reserved' },
{irq: '0', number: 31, des: 'Reserved' }
]
},
devices: {
"型号": {
deviceName: "对应芯片包中的名称",
cpuType: "Cortex-M0"
}
}
}
- conf:用了定义外设的依赖文件,以及定义了外设的HAL和LL文件路径,包括头文件
- main:定义了main.c文件中默认includes
- defines:定义了默认的宏定义
- includePaths:定义了默认的include路径
- startup:定义了芯片的中断描述,用来生成启动文件
- devices:定义了芯片的型号,以及芯片的CPU类型
外设模板
schema
base.cjs
module.exports = {
generate_code: { value: true, fixed: false },
rank: { value: 9, fixed: false },
do_not_generate_function_call: { value: false },
function_name: { value: '@COMPUTED_GET: "Studio_" + $this.$name + "_Init"' },
peripheral_instance_name: { value: '@COMPUTED_GET:$this.$name' },
firmware: { value: 'hal', options: [{ label: 'HAL', value: 'hal' }, { label: 'LL', value: 'll' }] },
file_name: "spi",//生成的文件名
peripheral_type: 'SPI', // 外设类型
it_function: "HAL_SPI_IRQHandler" // 中断处理函数
}
schema.cjs
该文件用来定义外设的配置项,用来生成外设的配置界面
module.exports = {
enable: false,//使能开关
Parameter:{//Tabs
label: 'Parameter',
//子元素
},
GPIO: {//Tabs
label: 'GPIO',
//子元素
},
NVIC:{//Tabs
label: 'NVIC',
//子元素
},
DMA:{//Tabs
label: 'DMA',
//子元素
},
}
func.cjs
该文件用来处理外设配置的逻辑
该文件下有几个固定的方法
- on__mounted
外设加载完成后执行 类型:() => void
exports.on__mounted = () => {
// do something
}
- on__enableChange
外设使能开关发生变化时执行 类型:() => void
exports.on__enableChange = () => {
// do something
}
- on__change
外设配置项发生变化时执行
类型:(params: {
id: string, // node 的 key 名 value: any, // 变化后的值 oldValue: any, // 变化前的值 path: string // node 的嵌套结构(例:'I2C1.Parameter.I2CSpeedMode') }) => void
exports.on__change = (params) => {
// do something
// params.id
// params.path
}
参数定义
params为object对象:
{
id: string, // param 的 key 名
value: any, // 变化后的值
oldValue: any, // 变化前的值
path: string // 元素路径(例:'I2C1.Parameter.I2CSpeedMode')
}
- on__tableAdd
当前 root 中的表格被用户点击新增按钮添加数据之后执行 类型:(params: { body: Record<string, Record<string, any>>, // 表格的 body 对象 row: Record<string, any> // 表格 body 新增的 行 对象 }) => void
exports.on__tableAdd = (params) => {
// do something
// params.row
// params.body
}
- on__tableDel
当前 root 中的表格被用户点击删除按钮删除数据之前执行 类型:(params: { body: Record<string, Record<string, any>>, // 表格的 body 对象 row: Record<string, any> // 表格 body 删除的 行 对象 }) => void
exports.on__tableDel = (params) => {
// do something
// params.row
// params.body
}
graphics.cjs
该文件用来生成外设的波形图
