当然问题也很明显,就是每次下载一个程序就要开始重新修改下数值,编译一下程序,而且还容易改错,那么就有了如下的这个
& z7 r1 u& W7 H* f$ I. l& \2 l. a
/ E7 H% Z& o8 b4 T- I2 M8 y* f2 d, q( N: o0 {1 v5 r
方案二:串口修改数据
4 \3 j8 n+ ?5 }0 g2 v每次下载完程序之后,手动的用串口发送一个数据给单片机,作为ID号保存到EEPROM里,但是每次还是需要手动的修改这个参数,但是不需要重复的去编译程序了, 虽然能解决一些问题但是还是没有办法从源头解决问题
5 N& a/ R9 x) M5 \/ k0 J% w
& x% [" }/ o1 ?6 ]7 j) y方案三:通过单独的
mcu制作一个ID号生成工具或者制作一个上位机,每次程序下载完成之后,将板子连接上位机或者这个工具,然后第二次写入数据,写入成功之后序号自加,虽然能解决手动写入出错的可能,但是也增大了操作的工作量,换我我也不愿意这么干!
6 u- }- B$ p0 ~# [) S4 ?
那么我们有没有办法能把下载和这个编码一步搞定呢?!很明显答案是有的,没有的话到这里这个帖子就全剧终了!
; `0 }" S Y: Y4 j4 B
# N+ v: o+ [9 r+ y) [6 k1 F9 c
这里就可以用到这个自动增量的界面,当然这部分的资料可能不是特别多,导致很多人都不知道这个神奇的功能,那这里统一来讲解下。
& C j4 z9 o! u首先顾名思义,这个自动增量的字面意思就是说,
可以往某个指定的地址里写入数据,且这个数据可以实现自动增量,比如从0开始写,写完一次变成1,在写一次变成2,在写一次变成3等等
* A- x- q+ R; ~% U这里可以通过存储地址设置保存的数据的地址,增量长度用来确定这是几个字节的数据,当前值就是即将要写入的数据,递增值就是每次写完之后数据需要自加多少,存储格式按自己的需要设置就好
- h$ @7 E& T6 E$ [5 F( A" }) H注意这里要区分的就是存储在用户代码区还是存储在EEPROM区,且存的时候千万不要覆盖了原本的数据。例如程序占用了从地址0开始的200字节的eeprom,结果这个自动增量数据设置在了地址0就完犊子了。
# o/ }+ X$ m0 K- Q d! e& L
- X, E- Q6 s& c; E: H这里以STC32举例。
# O- r; v) L9 `5 D1 R3 g# N. g
I% J! [, Y/ `7 m' Y3 t* @STC32的程序区是从0XFF0000开始的64K字节,EEPROM是从0XFE0000的最大64K字节。且需要注意的是,自动增量页面的地址会自动从0XFE0000开始偏移!意思就是说,写入地址0,实际上写入的就是0XFE0000的地址
" e. h& Q$ r* Y8 \* I所以由此可得知
) Q. T6 m' n5 i0 _% k- M: H
4 K- {4 L% N; E, U( k* f U: j上述页面的存储地址 在0 - 0x9999之间,0 @6 S8 J9 K$ R$ k" K+ e
4 S- H, w5 ]/ j& e9 G; ^: d2 ^# }! C上述页面的存储地址 在0x10000 - 0x19999之间,因为0X10000+0XFF0000就是程序区的0XFF0000.3 Q' _. w" F$ L$ v- L
所以确定了地址之后这里就可以这样写入了,配置内容按照自己的需求自定义即可。这里需要注意下,程序区和EEPROM区有什么区别,程序区的数据只有下载的时候才能修改,但是EEPROM区域的数据就可以用程序动态的修改,所以有ID之类固定的就可以写死在用户代码区,而初始密码之类的就可以写在EEPROM区。
' Z( c. L5 h0 i, B- B
3 O- Y* m2 b4 V3 ?3 c8 S7 c$ _% Q
这样单片机端的程序就编写完成了,超级简单!直接下载进单片机里,再来修改ISp软件上的数据! T7 c9 k0 q3 _' j6 V( z
! Z+ k- U/ w* a5 I8 S先修改程序区的,这里地址写0X1FBFF,这里需要注意的是这个地址有0x400的偏移,写的是0x1fbff,但是实际的地址是在0xfe0000 + 0x1fbff+0x400的位置,所以可以看到这里修改完之后这个数据位于程序区的0XFFFFFC-0XFFFFFF,所以我们单片机的程序的地址写的就是0xFffffc!这样这个程序区的ID就对上了。$ @2 i, w. `9 u
: K& Z& v2 j. A4 W4 `再来看这个EEPROM的数据,这里写入的地址是4,增量长度4字节,当前值1,增量值1,可以看到这个EEPROM文件里首字节是0xff,然后紧接着4个字节就是我们的增量数据,这里写入的是1,可以看到地址0xfe0001-0xfe0004就是我们的数据,所以单片机程序地址就是0xfe0001,这样配置完成之后我们下载下程序来看看效果!!
5 n/ p1 J+ t8 i# F2 P* X" u8 f
) `. k+ ^$ \; ?3 E V& j1 o, g可以看到串口直接打印出了我们预算的参数,且原本的自动增量窗口的当前值也已经发生了变化,再次下载观察下效果
8 h. ^. g0 k X" ?/ R5 G
是不是就实现了我们的预期功能,这个功能可以轻松的视线我们的全球唯一产品ID,或者动态的密码,且不需要我们手动的去重复编译程序!!
% C) V4 D8 {/ w: j w9 F1 o, w! K, r