很早前買的stm32 f103c8tb最小系統板一直在吃灰,今天決定拿出來搞搞。
下載程序可以有三種方式,這里介紹ISP方式,為什么叫ISP我覺得沒有道理,還不如叫串口燒寫,四根線就夠了,還需要一個cp2012usb2uart。flansh loader燒寫的時候需要將boot模式切換到從system memory啟動,具體操作起來就是將boot的引線開關換個檔。
boot模式的細節可以查datasheet,往深了討論又關乎到地址空間的分配。
flashloader是往0x 0800 0000的地址寫程序,這個時候需要調到boot from system memory。
大前提實在window7下。開發環境,一開始折騰了很久命令行編譯,雖然這條路很酷,不過的確充滿艱難,實在是不推薦。不過記錄下失敗過程,先是想用eclipse c++ CDT gnu-arm-ebai ,后來弄著弄著發現可以連eclipse都不用,直接gnu-arm-eabi cygwin。后來實在是坑太多,無奈放棄。
選擇用keil的時候,一開始循著百度出來的很多教程,折騰了keil4 + stm標準外圍庫,最后發現弄個led燈都把我給弄死了,時間從早上10點開始弄到現在都晚上7點多了,還是沒有放棄,因為期間發現keil編譯老是報 c++ compil 意外退出,查百度說是路徑有中文,重裝了系統,用戶名設置為全英文。
下載keil5+keil5 pack。弄了會兒才發現keil從5開始就提供了一種更為優雅的庫提供方式,利用可執行的pack文件即可輕松管理標準外圍庫的調用。不過到這里又遇到頭文件調用的坑,一開始看著有GPIO_stm32f10x.c,便以為頭文件應該是 GPIO_stm32f10x.h,雖然的確有這個頭文件,但是這個頭文件里的api并不是用來用戶調用的,后來查到一篇別人寫的跑馬燈示例程序,拿過來可以用,留意才發現,系統供用戶調用的接口都在pack目錄里device\stdperiph\inc\..而且命名規則也變成了stm32f10x_gpio.h
成功點亮。