首先,先要明确的是 GD 是硬件兼容蝴蝶的,但是由于提高了运行速度、以及内部工艺的不同,所以软件上可能都或多或 少需要改动一点的!
Q 01:ST上面原来的程序可以直接在GD上运行吗? A 01:对于大部分原来运行在 ST 系列 Flash 中的程序,是需要少量修改和调试的。
Q 02:使用 ISP 下载需要注意的问题? A 02:GD 基本兼容原来的 ST ISP下载程序,但是由于内部实现不同,GD 的全片擦除时间稍长了一点。
原有的 ST 发布的以及专业的下载器基本不需改动。(一般会有一个配置参数)
对于自己开发过 ISP 的朋友,需要把片擦除的等待时间加长一点。
对于使用 Jtag 和 SW 编程的用户是没有影响的。
Q 03:我是应该用 ST 的库还是使用 GD 的库? A 03:看过 GD 手册的朋友会发现,GD 的全部寄存器地址都是可以兼容 ST 的(极个别的某几位定义不同,但几乎不影响使用)
但是寄存器的名称确实还是有比较大的差异,对于当前大部分的需要移植的朋友来讲,我个人推荐还是在 ST 的库中修改。
这样可以保持原来的阅读习惯,并且改动量并不是很大。最好是在库中的启动代码前面加一段。
读一下 ID code,自动区分一下芯片的厂商和类型,这样就一劳永逸了。
按照 ARM 和 JEDEC-106 标准,
执行下面这个函数- <span style="word-break: break-all;">uint16_t Get_JTAG_ID( )</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;">{</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> if( *( uint8_t *)( 0xE00FFFE8 ) & 0x08 )</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> {</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> return </span><span style="word-break: break-all;"> </span><span style="word-break: break-all;">( ( *( uint8_t *)( 0xE00FFFD0 ) & 0x0F ) << 8 ) |</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> ( ( *( uint8_t *)( 0xE00FFFE4 ) & 0xFF ) >> 3 ) | </span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> ( ( *( uint8_t *)( 0xE00FFFE8 ) & 0x07 ) << 5 ) </span><span style="word-break: break-all;"><span style="word-break: break-all;">+ 1 ;</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> }</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;">
- </span><span style="word-break: break-all;"> </span><span style="word-break: break-all;">
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;"> return 0;</span>
- <span style="word-break: break-all;"> </span><span style="word-break: break-all;"><span style="word-break: break-all;">}</span></span></span></span></span></span></span></span></span></span></span></span></span>
复制代码 返回 0x041 是 ST (ST手册 Doc ID 13902 Rev 14 的 1055页 31.6.2 和 31.6.4 ) ,
返回 0x7A3 是 GD 。
另外,可以通过 JLink 读取该值,
ST103
#1 Id: 0x06414041 ,后三位。
GD103
#1 Id: 0x790007A3 ,后三位。
后面显示 : Unknwon device 这里不用担心,只是Jlink 库还未更新的缘故,不影响使用。估计很快就会显示 GD32 了。
|