文章總列表

Cortex-M3 vol.2 架起最小環境

上一篇提到我最後選了KEIL當作開發環境, 這一篇想講怎麼建構最小開發環境.

玩開發版, 我的習慣是讓LED一閃一閃亮晶晶, 看到一閃一閃, 好像我的未來也跟著點亮了 (嘴砲). 要讓LED亮暗很容易, 塞個boot-up code, 再塞個main function, 不過就是控制幾根pin腳的high-low, 翻一下data sheet以及schematics, 這件事可以輕鬆達成. 

以前小時候, 我喜歡什麼都自己來, 比如說自己寫一個LPC17xx.h, 照著register address刻一個出來; 或著看了Cortex-M3的手冊, 自己去編一個對應的header file, 以及操作的函數. 這樣做的學習曲線陡峭, 可以學到超多東西, 但是對於生產力實在沒什麼gain. 

所以我這次想仔細研究, 世界最好用的MCU開發環境, 他們是怎麼幫助user做這些事. 如果KEIL幫我搞定很多東西, 那我要怎麼使用, 不要硬是自己來. 底下列出一些note


Keil/ARM/CMSIS/Include/core_cm3.h
ARM編寫了所謂CMSIS library, 裡面有Cortex M3共同register一些structure definition. 這種東西有高手幫忙寫了, 一定比自己跛腳的版本好. 這個檔案有時候會需要去參考, 所以需要知道它放在哪裏.


Keil/ARM/INC/NXP/LPC17xx/LPC17xx.h
這個檔案會去include CMSIS的header file (也就是core_cm3.h), 所以平常使用, 其實我們都只是include LPC17xx.h. 另外這個檔案也包括LPC17xx系列專用的registers定義. 這邊就顯示KEIL開發環境的價值了, 一堆MCU都有現成的定義在裡面, 拿來就可以用, 不需要像我小時候一樣辛苦. 

另外在KEIL環境裡, 這個檔案Compiler會自動幫忙找到, 我猜是IDE幫忙設定include search path. 以前我會很堅持要把這個檔案拷貝出來, 放在自己的project底下. 現在我是覺得, 反正KEIL都有一套完整的方法維護這一切, 那就放開心胸的使用吧~


Keil/ARM/Startup/NXP/LPC17xx/startup_LPC17xx.s
這個檔案是系統提供的bootcode, 裡面也包括interrupt vector table. 寫MCU程式基本上都會需要改IRQ table, 所以KEIL會問要不要拷貝這個檔案到project底下. 

這隻檔案是用組語寫成, 小時候我研究ARM其他processor時, 也是到處去找這個檔案的範例. 如果連這個檔案我都要手工自己刻(還是assembly), 等我寫出來到會動, 頭髮都白了. 所以既然KEIL提供了, 那我就放開心胸去使用它吧.


Keil/ARM/Startup/NXP/LPC17xx/system_LPC17xx.c
這個檔案包括一段startup code, 主要是設定CPU裡面的PLL們(clock). 這些東西的特徵是, 如果它本來會動, 調整它就很容易, 反正改爛了都回得去; 如果是從無到有, 那工程就大得多, 畢竟PLL調不好, MCU就像石頭一樣不理你. 所以他的價值是一個現成的範例, 讓你省時省事.

另外在KEIL的IDE也提供一個GUI可以編輯這個檔案, 比如某個PLL的倍率多少可以直接設定, 不用直接去和register value打交道. 所以為什麼不拿來用? 

建立新專案時, 這個檔案需要自己拷貝到project目錄下, 然後它提供底下的界面讓user使用
  • SystemInit(), user在開機時要自己呼叫, 初始化系統, 這個最重要
  • uint32_t SystemCoreClock, global variable, 記載現在Core的clock
  • SystemCoreClockUpdate(), user要自己呼叫來更新上面的變數

Keil/ARM/INC/NXP/LPC17xx/system_LPC17xx.h
這個檔案正是上述的system_LPC17xx.c的header file, 需要用上面的界面時, 再include這支檔案即可. 


KEIL開發環境安裝好, 其實裡面還包括很多好物 (在Keil/ARM/底下), 例如CMSIS的文件也在裏頭. 現在我會覺得, 如果要玩MCU都會想要用這種環境, 省時省力. 只要瞭解這些事物之後, 放心使用這些基礎設施就好.

晚一點有空再把min-environment的project file傳一包上來...

留言

這個網誌中的熱門文章

幼犬書桌椅選擇心得 升降桌 兒童桌椅

STM32 UART + DMA,使用HAL實作TX/RX,以及不定長度接收

CANON G3000 廢墨瓶改裝