#1楼主:【分享】用GCC开发STM32 [精华]
文章发表于:2008-04-22 04:32
用GCC写的命令行界面测试程序
,代码和Makefile是基于http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html#stm32_blink修改的
找到2个可用的GCC Toolchain
一个是Codesourcery的官方Toolchain(选择ARM EABI):http://www.codesourcery.com/gnu_toolchains/arm/download.html
还有一个是WinARM的最新测试版本20080331(连接向下可以找到):http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/#winarm
不过这2个Toolchain的strcmp函数好像都有一些问题(表现为,如果参数有一个是指向SRAM的指针的话,程序会出问题,可能string.h里的函数都有这个问题,没有一一测试过),我自己写了一个代替:
u8 myStrCmp(char *s0, char *s1)
{
for (;*s0 == *s1;++s0,++s1)
if (*s0 == '\0')
return 0;
return (*(unsigned char *)s0 < *(unsigned char *)s1 ? -1 : +1);
}
运行图片(上位机使用115200_8N1,'#'是命令提示符):

到此,我习惯的开发环境已经建立完毕,要测试其他功能模块了(通过自己定义的命令)。然后再把这个界面通过USB CDC实现到USB接口上(硬件用st-link II?)。
拿st-link II开刀(谁让利源小气,提供的开发板没有USB接口),把命令行界面移植到了USB CDC接口,ST的库和示例代码中有一些错误,费了些时间。贪吃蛇和俄罗斯方块就不移植了(不浪费时间了),有兴趣的话可以找我要贪吃蛇和俄罗斯方块的源代码。以后如果要使用st-link II了,利源能否行行好,把固件给我下载一下?
USB CDC版CLI(已修改,可以使用STM32USBBoot下载):
附以前在CLI上实现的上贪吃蛇和俄罗斯方块的图片:


下一步:USB接口的Bootloader,终于可以解放串口了。MS ST提供了一个在USB示例程序中。
看了示例的一个文件,第一感觉:不稀饭,重写
暂定项目名为STM32USBBoot(和我以前开发的LPCUSBBoot正好一套,当然类似的还有AVR上的AVRUSBBoot),仍旧使用CDC模拟一路串口,在这个串口上,模仿STM32的串口ISP协议,这样,使用同样的上位机就可以下载程序。
LPCUSBBoot的实现方式也类似,干这事,偶可是熟门熟路的了。
接口方便,速度快,还没有波特率的问题,是居家旅游,杀人灭口。。。
http://www.simonqian.com/en/LPCUSBBoot/index.html
STM32USBBoot已完成,上位机使用Flash Loader(下载时,需要选择起始地址为0x08002000),占用Flash底部8K空间
应用程序需要做的修改:
1.连接脚本(设置起始地址为0x08002000):FLASH (rx) : ORIGIN = 0x8002000, LENGTH = 120K
2.NVIC设置SetVectTable需要加上一个偏移0x2000:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
测试Alpha版代码(发布时将使用GPLv2协议):请在我的网站下载最新版本
STM32的Flash串口下载速度相比NXP的ARM7要快非常多了,以下是STM32串口下载和USB接口下载的速度对比(NXP的LPC2148以前测试的时候发现差8倍),命令行中的区别是COM1和COM6
串口速度(47K程序):

USB接口速度(47K程序):

既然破坏了st-link II,下一步就要用st-link II的硬件再做一个JTAG调试工具了,其实这个不复杂,可以使用OpenOCD来实现,实现一些JTAG基本接口的调用,在OpenOCD中增加一个设备,实现jtag_interface_t结构中的几个接口函数,基本就OK了。不然当初也不会想都不想kill掉st-link II了,不过实现和测试确实需要一定的时间,而且,之后基本就只能使用Eclipse来作为调试界面了。