近來上ARM選修課找老師借了STM32來玩玩,準確來說是一塊集成icore3和CycloneIV的雙核心板。
之前一直以為keil是專門為51單片機而設計的,沒想到比想象中的要強大(怪我太辣雞==),C語言是獨立于指令集的高級語言,大部分情況下代碼都是一致的,但是不同單片機廠商和各家的IDE頭文件定義形式不同或者編譯器解釋(編譯)差別等等,造成了不同的開發環境,就好比用IAR也能開發51一樣。
新手剛開始接觸STM32F407,以最簡單的LED閃爍來說說keilMDK的工程創建步驟:
1.下載標準固件庫
ST官方提供的固件庫實際上就是一些底層,提供用戶函數調用的接口,減少了用戶對寄存器的直接操作。
- Libraries 里面是驅動庫的源代碼及啟動文件
- Project 用驅動庫寫的例子和工程模板
- Utilities 官方評估板對應的一些源碼,和第三方軟件庫,如emwin圖形軟件庫、fatfs文件系統
- .chm 是固件庫幫助文檔
2.創建自己的工程模板
合理的工程結構使得開發變得簡單維護起來也比較方便,首先說明幾個建立工程模板所必要的文件
- core_cm4.h 提供進入M4內核接口
- stm32f4xx.h 是 STM32F4 片上外設訪問層頭文件
- system_stm32f4xx.h 片上外設接入層系統頭文件,主要是申明設置系統及總線時鐘相關的函數,、對應的system_stm32f4xx.c是在系統啟動的時候用來設置系統的整個系統和總線時鐘。
- stm32f4xx_it.c、stm32f4xx_it.h 中斷相關
- stm32f4xx_conf.h 外設驅動配置
- stm32f3xx_rcc.c 和 stm32f4xx_rcc.h 是與 RCC 相關的一些操作函數
- startup_stm32f40_41xxx.s 重要的啟動文件
下面就來建立一個自己的工程模板,首先建立下面幾個文件夾:
其中
DERIVER
用來放置外設庫文件以及啟動文件(將 \Libraries 下的STM32F4xx_StdPeriph_Driver復制到其中),MDK-ARM
用來放置工程文件,USER
則是用戶自己創建的自定義功能文件這里要注意一點,可以刪除
main.h
,將stm32f4xx_it.c中間的#include "main.h"
以及SysTick_Handler()
函數里面的TimingDelay_Decrement()
函數注釋掉即可
下面正式建立一個工程,類似51單片機建立步驟將工程放在MDK-ARM目錄下,具體可以省略了,彈出的Mnange Run 窗口點擊 Cancel
在左欄工程目錄下右鍵選擇 Manage Projct Iterms 并添加如圖所示的源文件
3.LED實現
貼一波程序....實現LED閃爍還是比較容易的,主要利用官方給的底層就行.
4.折騰了好久的小問題
- 編譯提示無法打開.o文件,后面跟著一大串的地址,比如 C:\User\王某某......
連編譯一個最簡單的 main 加 while(1) 循環老是出錯
Fatal error: L6002U: Could not open file main.o: No such file or directory
.o
后綴文件是編譯過程中產生的,每個文件都生成.o文件,再把所有的.o文件鏈接成最后的執行程序,具體解決方法是,在電腦的高級系統設置下修改環境變量temp和tmp
C:\useramily這個是文件夾名可以隨意,但是可能你發現修改了這個之后依然無法成功編譯,重點在這,你需要先在C盤創建這個文件夾,然后再修改!!!這個坑跳了半天才跳出來....
- 提示 .initialize=initialize 不是一個預期的表達式
程序本身我檢查了數遍,沒有問題!!對比了例程發現!!在工程設置中Target中有一個設置不一樣..哭暈
在 Option for target 的 Target 下填入如圖內容,使其支持--c99標準,編譯就能通過,所以我不得不去查一下
--c99
的含義...
C99是在C89/90的基礎上發展起來的,增加了基本數據類型、關鍵字和一些系統函數等
比如支持可變參數的宏定義
新增了一種結構體/數組的初始化方式,名叫designated initializers 即:
struct { int a[3], b; } w[] ={ [0].a = {1}, [1].a[0] = 2 };[9]
還有很多很多,有想法可以去看看~
找到這個原因之后,想了想自己也接觸了一年的單片機竟然連這個都不知道,盡管無數次使用Keil編程,但是真真的熟悉里面的工程配置,ROM地址,匯編標準什么的了解的實在夠少,不管是我還是身邊的人,學習單片機嵌入式FPGA學習IDE環境,都只是簡單的了解創建工程..反正..能用就行,不是么...才疏學淺~
?? 如果還碰到稀奇古怪的問題,我就干脆單獨拿一篇文章來寫問題好了....
哇,久違的寫文章,實在是被這個創建工程弄的很煩,下一個可以考慮 vivado 工程創建。
2016/4/11
amilyxy