最近要用stm32开发产品,考虑到以前作高端arm,or32开发以及低端的avr开发都用gcc,因此为了降低学习难度和省钱,决定继续使用gcc。
经过搜索网络查阅资料,发现stm32的gcc支持虽然没有问题,但是对普通开发者而言,实在过于复杂,至少比avr-gcc复杂太多,
开发者在编写makefile之外,不得不自己搞定启动初始化代码,甚至自己要写ld文件,这实在不是件舒服的事。
因此,在参考网络诸多国内外的大侠提供的资料,综合自己的开发经验,经过一段时间完善,有了这个开发环境(并非集成开发环境IDE),
实现了普通开发人员无须关心启动初始化代码和ld文件,简化makefile编写,大大降低stm32 gcc入门难度的目的。
详细功能包括:
1>无须为自己的程序编写启动代码和ld描述文件,只需要写一个高度简化的makefile(提供了编写范例)
2>支持最小改动源码情况下,生成可用IAP程序下载的带ROM OFFSET程序(通过makefile控制),方便用户升级
3>命令行方式下载程序到stm32电路板
4>GUI方式使用IAP下载
注意:所有用到的程序均是开源且可免费获得,这里只是将它们综合起来使用
另:因为本人主要使用Linux环境开发,因此未对win32下进行测试,但是理论上应该是完全和cygwin环境兼容,没有问题。
首先用户自行下载stm32 gcc环境
注意下载EABI版本
SDK环境压缩文件
完整的开发环境设置,包括启动文件,ld文件,makefile模板,st官方fwlib及模板,详细看里面的readme.txt
由于目前手里只有stm32F103,ld文件模板只有这个的ROM(FLASH)方式,其他芯片模板可参考建立(已经进行了简化,很简单),或者等以后俺添加
IAP示例
针对万利EK-STM32(STM3210B-LK1)的ST官方IAP实例移植及LED测试程序,注意,使用的按键是KEY2,当IAP已装入板子后,启动系统时
如果检测到KEY2为已经按下状态,则进入IAP模式,否则加载0x8002000起的应用程序
其中IAP部分makefile包含了如何使用wine调用win32下的stm32boot下载工具来下载iap.bin到目标板
由于IAP使用了ymodem协议,我使用了linux下可以和这个IAP协同工作的GUI程序cutecom,另还要安装lrzsz,cutecom会自动调用lrzsz,
cutecom设置示意图如下:
cutecom设置画面
注意IAP要求输入命令1时,移到input区输入键盘按键”1”即可
adc及lcd测试示例
同上,为修改的adc测试程序,额外添加了TIM测试,休眠测试,按键测试及浮点数计算等,默认编译需要使用IAP来下载它。
编程注意事项:
1>makefile中,是通过添加OBJS += xxx.o来添加用户文件的,注意后缀不是.c
2>makefile第一行指定SDK目录位置,自己按自己路径修改
3>为了使同一个程序代码无须修改即可运行于rom offset模式(使用IAP加载)
NVIC_Configuration中对应代码需要修改为如下
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, ROM_OFFSET_SIZE);
#endif