EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 lukeluck 于 2020-7-29 09:40 编辑
2 R1 }9 F6 R4 q/ J) |) u% Q$ ?# h9 y, g& L$ `
▎By the engineer, for the engineer 关于代码生成,初一看觉得好神奇,让人想起黑客帝国来。& Z* j, S; T; U
通过代码生成代码,原来用Excel就可以轻松实现。最近接触了一些嵌入式编程的知识,以STM32 mcu为例,入门的应用就是IO口初始化了。 P+ o( N6 o! j
下面就来和大家一起用Excel实现STM32 MCU的IO口初始化代码生成。
% ~+ f3 q& p( G& T8 B01 用Excel配置IO口属性
+ U; ^4 H- @2 P9 G5 f" u0 I% d只需要在下面的工具中按每个IO口的属性修改相应的二进制值,这个工具会自动生成十六进制码。# j1 c- ]8 |5 W% P% U
自动计算十六进制的原理也非常简单,主要是利用Excel自带的进制转换函数DEC2HEX,以及TEXT 和REPT函数。F26 = TEXT(DEC2HEX(SUMPRODUCT(2^G24:AL24*G26:AL26)),"000000000")E26 = "0x"&IF(LEN(F26)<8,REPT("0",8-LEN(F26))&F26,F26) F26,E26单元格中设置的公式分别是实现将二进制数转化为十六进制,同时设置整齐的8位格式。 将某个Port配置完成后点击工具中的代码生成就会自动生成这个Port口的初始化代码:
7 K, ~# S1 \0 ^" F所有的Port口配置完成之后点击复制代码,然后在IDE窗口中粘贴就ok了。
1 _2 A6 c1 s9 e5 f9 b* {可以看出这样生成的代码不仅非常整齐美观,而且连二进制注释也自动帮助大家写好了,非常方便。) ?! ?4 }9 Q3 P& F" n
6 p+ V; F; U. s. r' ^02 动图演示8 v+ Q! y0 t5 f( W" k0 ^; c6 R
" a0 w% g" ]2 l0 b& C9 i% e1 w/ E% D0 @" i: ~1 c& t/ R3 F
完整的配置过程动图演示如下:
/ ^+ |9 s8 g# o$ D2 J! |6 I& b9 y: T4 V+ k4 v, ]
STM32配置IO口的过程由原来的拿程序员计算器反复在二进制和十六进制之间来回转换变成了通过鼠标点一点,可以说是减少了很多不必要的工作量了。
8 w* |! i; C1 ^# H, l" d! m) ], B$ ]; L" C& }$ j0 D& K
03 Excel简化问题思路: C# w8 q: C- g D7 t1 R
& L: V$ F/ N# `通过上面的案例分享大家可以发现其实代码生成也没有想象中的那么难。ST公司官方有一个功能更加完善的工具STM32Cube,实现的功能可能也无非如此,但是思路我猜测是一致的。7 L( |" A: r/ J1 u7 D
# f8 B3 \) n5 t
9 d) O! M4 g2 C1 \. |这个例子也进一步说明Excel这个软件的强大,用好Excel可以减少很多不必要的重复工作!
x l, f% O: `! t5 g9 I
0 A2 z" Q# |# B$ T) |6 D其实我想说的是通过这个案例大家可以进一步思考下:
( L1 T" h+ `) P3 V* |) V/ R* D当面对重复的数字工作时,我们可以有意识地提醒自己是不是用几个Excel函数加一些简单的VBA编程就可以大大简化这些工作呢?
' R0 O* p D$ c! l# a工具下载链接见附件!
5 F# L0 K5 b* U {( D" Q6 i0 s0 C# R' R
( H+ \( b9 n, D P% f* k8 O
|