首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32 CubeMX自定义代码生成

STM32 CubeMX自定义代码生成
EN

Stack Overflow用户
提问于 2016-06-03 10:30:55
回答 1查看 3.9K关注 0票数 5

我正在使用STM32CubeMX,并尝试使用生成我的自定义代码 (UM1718页面141),并使用使用过的周期表。很容易在闪存中有固定的表和按预期用途分组的周期句柄和实例。例如,这个头文件:

some.h:

代码语言:javascript
复制
/* TIM table */
#define EM_TIM1     0       // index
#define EM_TIM6     1

#define TIM_CNT     2       // count

#define TIM_0_INST      TIM1        // table of instaces
#define TIM_1_INST      TIM6

extern TIM_HandleTypeDef htim1;     // table of handles
extern TIM_HandleTypeDef htim6;

#define TIM_0_HNDL      htim1       // table of handles
#define TIM_1_HNDL      htim6

struct tim_tab_s {
    TIM_TypeDef * inst;
    TIM_HandleTypeDef * hndl;
};

extern struct tim_tab_s const tim_tab[TIM_CNT];

我用这个自定义模板生成了:

some_h.ftl:

代码语言:javascript
复制
[#ftl]
[#list configs as dt]
[#assign data = dt]
[#assign peripheralParams =dt.peripheralParams]
[#assign peripheralGPIOParams =dt.peripheralGPIOParams]
[#assign peripheralDMAParams =dt.peripheralDMAParams]
[#assign peripheralNVICParams =dt.peripheralNVICParams]
[#assign usedIPs =dt.usedIPs]
[#assign ip_pref = "EM_"]
[#-- ip desrcibe grpName  varName instType       hndlType --]
[#assign ip_tim =["TIM",  "htim", "TIM_TypeDef", "TIM_HandleTypeDef" ]]
[#assign ip_grps = [ip_tim]]
[#list ip_grps as ip_group]
    [#assign ip_grp = ip_group[0]]
    [#assign ip_var = ip_group[1]]
    [#assign ip_instType = ip_group[2]]
    [#assign ip_hndlType = ip_group[3]]
    /* ${ip_grp} table */
    [#assign ip_id = 0]                      [#-- IPs Index --]
    [#list usedIPs as ip]
        [#if peripheralParams.get(ip).entrySet()?size>0&&ip?contains(ip_grp)]
            #define ${ip_pref}${ip} ${ip_id}[#if ip_id == 0]  // index[/#if]
            [#assign ip_id = ip_id + 1]
        [/#if]
    [/#list][#-- list IPs --]
    #n
    #define ${ip_grp}_CNT ${ip_id}  // count
    #n
    [#assign ip_id = 0]               [#-- IPs Instaces --]
    [#list usedIPs as ip]
        [#if peripheralParams.get(ip).entrySet()?size>0&&ip?contains(ip_grp)]
            #define ${ip_grp}_${ip_id}_INST ${ip}[#if ip_id == 0]  // table of instaces[/#if]
            [#assign ip_id = ip_id + 1]
        [/#if]
    [/#list][#-- list IPs --]
    #n
    [#assign ip_id = 0]               [#-- IPs HAL handles declar --]
    [#list usedIPs as ip]
        [#if peripheralParams.get(ip).entrySet()?size>0&&ip?    contains(ip_grp)]
            extern ${ip_hndlType} ${ip_var}${ip.replace(ip_grp,"")};[#if ip_id == 0] // table of handles[/#if]
            [#assign ip_id = ip_id + 1]
        [/#if]
    [/#list][#-- list IPs --]
    #n
    [#assign ip_id = 0]                [#-- IPs HAL handles --]
    [#list usedIPs as ip]
        [#if peripheralParams.get(ip).entrySet()?size>0&&ip?contains(ip_grp)]
            #define ${ip_grp}_${ip_id}_HNDL ${ip_var}${ip.replace(ip_grp,"")}[#if ip_id == 0] // table of handles[/#if]
            [#assign ip_id = ip_id + 1]
        [/#if]
    [/#list][#-- list IPs --]
[/#list][#-- list ip_grps --]
[/#list][#-- list configs --]

直到现在我才和共济会者合作。

我的问题是我找不到方法从这个数据模型中提取更多的信息

  • 关于句柄类型和名称的(我只是简单地声明它为[#assign ip_tim =["TIM", "htim", "TIM_TypeDef", "TIM_HandleTypeDef" ]]),
  • 关于不与任何周期相关的GPIOs,但是初始化并有标签(我不知道)。

如UM1718所述:

用户模板文件必须与STM32CubeMX数据模型兼容。这意味着模板必须从以下行开始: #ftl #赋值数据= dt #赋值peripheralGPIOParams =dt.peripheralGPIOParams 并以 /#list

是否意味着无法提取必要的信息(主要是关于GPIOs的信息)?

或者我如何检查这个?我尝试了这一个来描述数据模型,但是只找到了GPIO端口的列表。

EN

回答 1

Stack Overflow用户

发布于 2016-06-21 15:56:36

这是我在大约一个月前打开的ST支持票的响应。所以现在这是我问题的一个真正的答案。

尊敬的客户: 不幸的是,这个特性是非常新的,实验性的,没有很好的文档,所以我无法帮助您解决这个问题。API也可能在以后的版本中被更改。如果我正确理解它,您可以通过手动定义数组来解决这个问题。 致以良好的问候,ST MCU支持小组

我在等新的版本!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37612015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档