McuStudioMcuStudio
指南
开发者
组件
API
  • 团队
  • 版本发布
合作伙伴
指南
开发者
组件
API
  • 团队
  • 版本发布
合作伙伴
    • 组件
    • 模板
    • 基础组件
    • 容器组件
    • 芯片组件
    • 时钟树组件

模板

芯片模板目录结构

|---模板根目录
    |---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

该文件用来生成外设的波形图

code

Prev
组件
Next
基础组件