STM32F4xx系列微處理器比市場(chǎng)上同類(lèi)產(chǎn)品先進(jìn)得多。除了是快速的32位MCU,STM32F4還具有豐富的硬件外設(shè)支持以及DSP引擎優(yōu)勢(shì)。就功能和價(jià)格而言,STM32F4是全勝者。最近,STM32用戶(hù)社區(qū)激增。 STM32 Discovery開(kāi)發(fā)板正在以前所未有的速度增長(zhǎng)。最近,我?guī)状问盏阶x者關(guān)于STM32F4xx標(biāo)準(zhǔn)外設(shè)庫(kù)(SPL)與MikroC Pro for ARM集成的切實(shí)詢(xún)問(wèn),因此,盡管這不是我關(guān)于STM32 ARM的主流文章之一,但我還是覺(jué)得我應(yīng)該解決這個(gè)話題。之前,我展示了如何通過(guò)MikroC移植STM32F1xx系列設(shè)備的STM32F1xx SPL。這篇文章與以前的文章沒(méi)有什么不同-只是微小的變化。我建議讀者在閱讀這篇文章之前先閱讀較早的帖子。
目前MikroC編譯器是為數(shù)不多的尚未正式為SPL集成提供任何支持的編譯器之一。希望他們將來(lái)會(huì)添加此支持,但是MikroC解決方案的方式與其他編譯器不同。 MikroC擁有非常強(qiáng)大的IDE和豐富的庫(kù)基礎(chǔ)支持,而SPL為用戶(hù)提供了對(duì)芯片硬件的更多控制權(quán)。就像我之前說(shuō)過(guò)的一樣,它們變成了一把雙刃劍。
所需的工具
首先,您需要MikroC Pro for ARM。該編譯器的演示版本提供8k代碼限制,足以滿(mǎn)足第一手ARM經(jīng)驗(yàn)。您需要一塊STM32F4xx板。我使用了STM32F407VG發(fā)現(xiàn)。 ST Microelectronics的該板 某種程度上是STM32F4系列的旗艦Discovery板,并且非常受歡迎。最后,您將需要我包含在示例中的STM32F4xxx SPL。修改其中的文件以使其與MikroC環(huán)境兼容。
要做的事情
首先,我們需要準(zhǔn)備用于ARM編譯器的MikroC PRO,以鏈接SPL。我假設(shè)編譯器已預(yù)先安裝。首先轉(zhuǎn)到編譯器的安裝文件夾,然后找到 include 文件夾。就我而言,它是: C: Users Public Documents Mikroelektronika mikroC PRO for ARM Include 。
在此文件夾中,有一個(gè)名為 stdint.h的文件。將其重命名為 stdint(備份).h 并從提供的文件夾中復(fù)制新的 stdint.h 文件到這個(gè)位置。如果您在上一篇文章中已經(jīng)這樣做,或者已升級(jí)到MikroC Pro for ARM版本4.15(在撰寫(xiě)本文時(shí)為最新版本),請(qǐng)?zhí)^(guò)此部分。
接下來(lái),我們必須更改編譯器的某些選項(xiàng)。啟動(dòng)編譯器,并如下所示:
工具》》選項(xiàng)》》輸出設(shè)置
檢查 區(qū)分大小寫(xiě) 。應(yīng)用并關(guān)閉此窗口。如果您之前已經(jīng)做過(guò),請(qǐng)?jiān)俅翁^(guò)此部分。
從現(xiàn)在開(kāi)始要謹(jǐn)慎命名和字母大小寫(xiě),因?yàn)榫幾g器現(xiàn)在對(duì)此很敏感,否則您將注定要陷入編程不幸的深淵。只是一個(gè)簡(jiǎn)單但有用的提示-在進(jìn)行一些編輯或修改后,很少會(huì)編譯您的代碼。這將極大地幫助您調(diào)試一小段編碼窗口中的微小錯(cuò)誤。
最后將SPL保持在安全的位置。每當(dāng)您使用SPL編碼新項(xiàng)目時(shí),都應(yīng)從該位置復(fù)制該新項(xiàng)目并與該項(xiàng)目一起使用。這樣可以確保原始的SPL副本不會(huì)被意外修改。
使用SPL編碼
示例代碼只是另一個(gè)閃爍的代碼示例,可以滿(mǎn)足要求。我不會(huì)告訴您如何在MikroC中創(chuàng)建新項(xiàng)目。我想這是眾所周知的。創(chuàng)建一個(gè)新項(xiàng)目,并使用 項(xiàng)目管理器 添加SPL文件夾中的所有源文件和頭文件。您可以?xún)H添加所需外圍設(shè)備的頭文件和源文件,也可以添加所有文件(如果不確定哪個(gè)代表哪個(gè))。前一種方法比后者花費(fèi)更少的編譯時(shí)間。另外,添加 defines.pld 項(xiàng)目級(jí)別定義文件?,F(xiàn)在您可以使用SPL進(jìn)行編碼了。
請(qǐng)注意,由于MikroElektronika尚未正式集成SPL,因此您會(huì)注意到紅色帶有SPL的代碼各部分下的錯(cuò)誤標(biāo)記。這并不罕見(jiàn),也不是錯(cuò)誤。所以不用擔(dān)心。
代碼:
#include “stm32f4xx_gpio.h” #include “stm32f4xx_usart.h” #include “stm32f4xx_rcc.h” void setup_GPIOs(); void check_LEDs(); void main() { unsigned char s = 0; setup_GPIOs(); check_LEDs(); while(1) { if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)) { while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 1); s++; } if(s 》= 6) { s = 0; } switch(s) { case 1: { GPIO_SetBits(GPIOD, GPIO_Pin_12); break; } case 2: { GPIO_SetBits(GPIOD, GPIO_Pin_13); break; } case 3: { GPIO_SetBits(GPIOD, GPIO_Pin_14); break; } case 4: { GPIO_SetBits(GPIOD, GPIO_Pin_15); break; } case 5: { GPIO_SetBits(GPIOD, GPIO_Pin_12); GPIO_SetBits(GPIOD, GPIO_Pin_13); GPIO_SetBits(GPIOD, GPIO_Pin_14); GPIO_SetBits(GPIOD, GPIO_Pin_15); break; } default: { break; } } Delay_ms(90); GPIO_ResetBits(GPIOD, GPIO_Pin_12); GPIO_ResetBits(GPIOD, GPIO_Pin_13); GPIO_ResetBits(GPIOD, GPIO_Pin_14); GPIO_ResetBits(GPIOD, GPIO_Pin_15); Delay_ms(90); } } void setup_GPIOs() { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &GPIO_InitStructure); } void check_LEDs() { GPIO_SetBits(GPIOD, (GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)); Delay_ms(900); GPIO_ResetBits(GPIOD, (GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15)); }
演示視頻鏈接:https://www.youtube.com/watch?v=ngk-4Lm11yU。
我個(gè)人還沒(méi)有到目前為止,我一直依賴(lài)SPL,而且我相信原始級(jí)別的編碼學(xué)習(xí)。 SPL允許在STM32領(lǐng)域中輸入教科書(shū)。難怪它使編碼變得容易,但是在我看來(lái),它的不利影響是它的用戶(hù)花在參考手冊(cè)和數(shù)據(jù)表上的時(shí)間更少。反過(guò)來(lái),這將影響他們獲得對(duì)內(nèi)部硬件外圍設(shè)備及其工作原理的扎實(shí)學(xué)習(xí)。如果SPL通過(guò)這種方式使生活變得輕松,那為什么不使用MikroC庫(kù)。這些甚至更易于使用。有時(shí)圖書(shū)館是救星,而有時(shí)它們是詛咒。有時(shí)您不想重新發(fā)明“輪子”,但您當(dāng)然想用它制造汽車(chē),而我的朋友比什么都值錢(qián)。在這一點(diǎn)上,我不想就此事進(jìn)一步辯論。我將這個(gè)選擇留給用戶(hù)。
文件:將STM32F4xx標(biāo)準(zhǔn)外圍設(shè)備庫(kù)與MikroC Pro for ARM集成。
責(zé)任編輯:wv
-
編譯器
+關(guān)注
關(guān)注
1文章
1618瀏覽量
49057 -
STM32F4xx
+關(guān)注
關(guān)注
0文章
15瀏覽量
12758
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論