完整且超簡化的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環境
http://www.codesourcery.com/gnu_toolchains/arm/download.html
注意下載EABI版本
SDK環境壓縮文件 SDK.rar (1.21 MB)
完整的開發環境設置,包括啓動文件,ld文件,makefile模板,st官方fwlib及模板,詳細看裏面的readme.txt
由於目前手裏只有stm32F103,ld文件模板只有這個的ROM(FLASH)方式,其他芯片模板可參考建立(已經進行了簡化,很簡單),或者等以後俺添加
IAP示例 IAP_AN_gcc.rar (231.29 KB)
針對萬利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測試示例 adc1_lcd.rar (19.64 KB) 同上,爲修改的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
經過搜索網絡查閱資料,發現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環境
http://www.codesourcery.com/gnu_toolchains/arm/download.html
注意下載EABI版本
SDK環境壓縮文件 SDK.rar (1.21 MB)
完整的開發環境設置,包括啓動文件,ld文件,makefile模板,st官方fwlib及模板,詳細看裏面的readme.txt
由於目前手裏只有stm32F103,ld文件模板只有這個的ROM(FLASH)方式,其他芯片模板可參考建立(已經進行了簡化,很簡單),或者等以後俺添加
IAP示例 IAP_AN_gcc.rar (231.29 KB)
針對萬利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測試示例 adc1_lcd.rar (19.64 KB) 同上,爲修改的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
再補貼個makefile,大家看是否簡潔
STM32_SDK_DIR = /src/work/stm32/SDK
TARGET = iap
PCB_BOARD = EK_STM32F
#RUN_MODE = ROM_RUN
APP_BASE = ..
APP_SRC_DIR = $(APP_BASE)/source
CFLAGS += -I$(APP_BASE)/include
OBJS += stm32f10x_it.o
OBJS += stm32f10x_lib.o
OBJS += stm32f10x_gpio.o
OBJS += stm32f10x_rcc.o
OBJS += stm32f10x_flash.o
OBJS += stm32f10x_usart.o
OBJS += stm32f10x_wwdg.o
OBJS += common.o
OBJS += download.o
OBJS += ymodem.o
OBJS += main.o
##########################################################################
include $(STM32_SDK_DIR)/pub/config.mk
#########################################################################
upload: $(TARGET).bin
wine ./stm32boot -e -c com3 $(TARGET).bin
#########################################################################
STM32_SDK_DIR = /src/work/stm32/SDK
TARGET = iap
PCB_BOARD = EK_STM32F
#RUN_MODE = ROM_RUN
APP_BASE = ..
APP_SRC_DIR = $(APP_BASE)/source
CFLAGS += -I$(APP_BASE)/include
OBJS += stm32f10x_it.o
OBJS += stm32f10x_lib.o
OBJS += stm32f10x_gpio.o
OBJS += stm32f10x_rcc.o
OBJS += stm32f10x_flash.o
OBJS += stm32f10x_usart.o
OBJS += stm32f10x_wwdg.o
OBJS += common.o
OBJS += download.o
OBJS += ymodem.o
OBJS += main.o
##########################################################################
include $(STM32_SDK_DIR)/pub/config.mk
#########################################################################
upload: $(TARGET).bin
wine ./stm32boot -e -c com3 $(TARGET).bin
#########################################################################