完整且超简化的linux下stm32开发环境(编译,下载)---测试中

最近要用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