前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于STM32代码自动生成的工具的进度....

关于STM32代码自动生成的工具的进度....

作者头像
MCU起航
发布2020-06-29 15:30:06
5060
发布2020-06-29 15:30:06
举报
文章被收录于专栏:单片机爱好者单片机爱好者

前情提要:STM32代码自动生成工具_本想...但是...可是...所以

首先说一下那几天大家的反应,有的持观望态度,毕竟STM32CUBE很香;有的很激动,期待我快点出东西;还有的很淡定,知道我在挖坑,填坑遥遥无绝期;还有的,希望我把当前这个工具分享出来………..

兄弟,作者都已经说了不要分享,你这样合适吗?

退一步,我是怎么得来这个工具的?网上搜的,你要是真想要……..

还要感谢一位网友,他分享给我一个C#的反编译工具,直接把那个软件反编译成了源码。

这种反编译出来的源码和作者手写的,在实现方法上应该不一样。打个比方,源码里我用for循环输出10个字符串,反编译出来的代码,估计就是老老实实输出10个字符串。

然后聊聊我手上现有的几款代码自动生成工具(是的,我不止有一个),当然,CUBE就不聊了,咱目前没这能力。

我最开始接触到代码自动生成,是网上的一些小工具,有51的,有AVR的。但51的我只在入门阶段使用,AVR的我已经很久不用了,所以印象一般。

第一次印象比较深的时候,是使用PIC单片机(就是收购ATMEL的那个土豪),他们家的编译器有一个小插件叫:MCC,输入一些配置,就能自动生成大部分初始化所需的代码。很好用,当时在工作中帮我省了很多时间。

再后来,接触ST系列,有8有32。8分为几个系列,有S(增强型)系列,有L(低功耗型)系列,有A(汽车级)系列,如果有遗漏欢迎补充。

我用S和L多一些,但每次配寄存器都是一个漫长的工程,拿着手册翻阿翻。忽然有一天,我想,有没有省力一些的方法,然后开始有目的的上网。找到了两个,一个已经分享过了,我放两个图:

他针对的是S系列,当时提过,这是一个大三的学生写的工具。功能上虽然有小bug,但已经能替代大部分手工了(想想我大三的时候在干嘛)。

如果有懂软件的,应该能想想到这个工作量有多大。把每个函数翻译成中文还好,麻烦的地方在于,要给每个函数设计一个右边用来配置的界面,注意,是每一个!即便可以针对功能类似的函数进行分类,使用同一个页面,但是每个参数的功能描述就足够把人累傻。

这是个力气活!

然后是另一个,作者的意思是这软件只针对8的L系列,如下:

它在使用前需要导入完整的库文件。导入后如下:

相比第一个软件,它使用了一种很巧妙的方式。注意看这两个图参数的摆放位置,懂的人,从它提示要导入库文件应该就懂了。

是的,它把库文件做了一下整理,判断出哪部分是函数名,哪部分是参数。函数直接在上面显示,然后把参数按顺序添加到combox里。

我推测,ADC1那个参数下面应该还有一列combox,只是属性设置了不可见。当有参数添加到combox里时,属性设置为可见。

我试着导入S系列和32的库,出现部分报错的情况~~~

第三个就是那天你们见到的那个。说实话,这三个风格差不多,实现方式也都差不太多。个人推测第一种和第三种费力一些,第二种省事一些。

另外就是STM8的库和32的库,在功能实现上,有一些设计上的差别。例如8,初始化GPIO,一行代码就够了:

代码语言:javascript
复制
GPIO_Init(GPIOA, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);

但是32,需要先定义一个GPIO的结构体,对结构体的参数做配置,然后再通过初始化函数导入结构体里配置的值:

代码语言:javascript
复制
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;//最高输出速率10MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化外设GPIOx寄存器

这就导致,不能用第二个工具的方法直接整理库函数,还要多做一些工作。否则,我直接给你生成一行:

GPIO_Init(GPIOA, &GPIO_InitStructure);

你会一脸懵逼,然后来骂我~~~

然后说我的思路,懂我的人都知道,我懒……..

还是想以第二个工具的思路为主,但是针对GPIO初始化、TIMER初始化等功能还是要做一些功能上的增加,否则这个工具就没什么意义了。

所以工作分两部分,一部分是对标准外设库进行整理;另一部分是添加初始化相关的代码进行配合。

第一部分应该比较省事,第二部分就是个力气活了~~~

最后是进度………….

没事了,散了吧~~~

不对,还有个事,谁帮我想个霸气的名字?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单片机爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档