0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣將STM32F4xx標(biāo)準(zhǔn)外圍設(shè)備庫與MikroC Pro for ARM集成

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-12-05 16:38 ? 次閱讀

STM32F4xx系列微處理器比市場上同類產(chǎn)品先進(jìn)得多。除了是快速的32位MCU,STM32F4還具有豐富的硬件外設(shè)支持以及DSP引擎優(yōu)勢。就功能和價(jià)格而言,STM32F4是全勝者。最近,STM32用戶社區(qū)激增。 STM32 Discovery開發(fā)板正在以前所未有的速度增長。最近,我?guī)状问盏阶x者關(guān)于STM32F4xx標(biāo)準(zhǔn)外設(shè)庫(SPL)與MikroC Pro for ARM集成的切實(shí)詢問,因此,盡管這不是我關(guān)于STM32 ARM的主流文章之一,但我還是覺得我應(yīng)該解決這個(gè)話題。之前,我展示了如何通過MikroC移植STM32F1xx系列設(shè)備的STM32F1xx SPL。這篇文章與以前的文章沒有什么不同-只是微小的變化。我建議讀者在閱讀這篇文章之前先閱讀較早的帖子。

目前MikroC編譯器是為數(shù)不多的尚未正式為SPL集成提供任何支持的編譯器之一。希望他們將來會(huì)添加此支持,但是MikroC解決方案的方式與其他編譯器不同。 MikroC擁有非常強(qiáng)大的IDE和豐富的庫基礎(chǔ)支持,而SPL為用戶提供了對(duì)芯片硬件的更多控制權(quán)。就像我之前說過的一樣,它們變成了一把雙刃劍。

所需的工具

首先,您需要MikroC Pro for ARM。該編譯器的演示版本提供8k代碼限制,足以滿足第一手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(在撰寫本文時(shí)為最新版本),請(qǐng)?zhí)^此部分。

接下來,我們必須更改編譯器的某些選項(xiàng)。啟動(dòng)編譯器,并如下所示:

工具》》選項(xiàng)》》輸出設(shè)置

檢查 區(qū)分大小寫 。應(yīng)用并關(guān)閉此窗口。如果您之前已經(jīng)做過,請(qǐng)?jiān)俅翁^此部分。

從現(xiàn)在開始要謹(jǐn)慎命名和字母大小寫,因?yàn)榫幾g器現(xiàn)在對(duì)此很敏感,否則您將注定要陷入編程不幸的深淵。只是一個(gè)簡單但有用的提示-在進(jìn)行一些編輯或修改后,很少會(huì)編譯您的代碼。這將極大地幫助您調(diào)試一小段編碼窗口中的微小錯(cuò)誤。

最后將SPL保持在安全的位置。每當(dāng)您使用SPL編碼新項(xiàng)目時(shí),都應(yīng)從該位置復(fù)制該新項(xiàng)目并與該項(xiàng)目一起使用。這樣可以確保原始的SPL副本不會(huì)被意外修改。

使用SPL編碼

示例代碼只是另一個(gè)閃爍的代碼示例,可以滿足要求。我不會(huì)告訴您如何在MikroC中創(chuàng)建新項(xiàng)目。我想這是眾所周知的。創(chuàng)建一個(gè)新項(xiàng)目,并使用 項(xiàng)目管理器 添加SPL文件夾中的所有源文件和頭文件。您可以僅添加所需外圍設(shè)備的頭文件和源文件,也可以添加所有文件(如果不確定哪個(gè)代表哪個(gè))。前一種方法比后者花費(fèi)更少的編譯時(shí)間。另外,添加 defines.pld 項(xiàng)目級(jí)別定義文件。現(xiàn)在您可以使用SPL進(jìn)行編碼了。

請(qǐng)注意,由于MikroElektronika尚未正式集成SPL,因此您會(huì)注意到紅色帶有SPL的代碼各部分下的錯(cuò)誤標(biāo)記。這并不罕見,也不是錯(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è)人還沒有到目前為止,我一直依賴SPL,而且我相信原始級(jí)別的編碼學(xué)習(xí)。 SPL允許在STM32領(lǐng)域中輸入教科書。難怪它使編碼變得容易,但是在我看來,它的不利影響是它的用戶花在參考手冊和數(shù)據(jù)表上的時(shí)間更少。反過來,這將影響他們獲得對(duì)內(nèi)部硬件外圍設(shè)備及其工作原理的扎實(shí)學(xué)習(xí)。如果SPL通過這種方式使生活變得輕松,那為什么不使用MikroC庫。這些甚至更易于使用。有時(shí)圖書館是救星,而有時(shí)它們是詛咒。有時(shí)您不想重新發(fā)明“輪子”,但您當(dāng)然想用它制造汽車,而我的朋友比什么都值錢。在這一點(diǎn)上,我不想就此事進(jìn)一步辯論。我將這個(gè)選擇留給用戶。

文件:將STM32F4xx標(biāo)準(zhǔn)外圍設(shè)備庫與MikroC Pro for ARM集成。

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49016
  • STM32F4xx
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    12752
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植到 GD32F4xx

    GD32F4xx 系列 MCU 是基于 Arm? Cortex?-M4 處理器的 32 位通用微控制器,與 STM32F4xx系列 MCU 保持高度兼容。本文主要從以下三個(gè)方面進(jìn)行介紹
    的頭像 發(fā)表于 09-06 09:40 ?891次閱讀
    【GD32 MCU 移植教程】8、從 <b class='flag-5'>STM32F4xx</b> 系列移植到 GD32<b class='flag-5'>F4xx</b> 系

    STM32CubeIDE編譯工程報(bào)錯(cuò)如何解決?

    arm-none-eabi-gcc \"../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c\" -mcpu=cortex-m4 -
    發(fā)表于 07-23 07:06

    STM32F10xx芯片資料

    電子發(fā)燒友網(wǎng)站提供《STM32F10xx芯片資料.pdf》資料免費(fèi)下載
    發(fā)表于 07-08 14:56 ?1次下載

    STM32F10x標(biāo)準(zhǔn)外設(shè)參考手冊

    STM32F10x標(biāo)準(zhǔn)外設(shè)參考手冊
    發(fā)表于 06-24 09:26 ?11次下載

    請(qǐng)問STM32F4XX系列USB的usb_regs.h文件有什么用處?

    STM32F4XX 系列USB的usb_regs.h文件有什么用處?
    發(fā)表于 05-17 06:13

    請(qǐng)問STM32F4XX是單指令乘法嗎?

    請(qǐng)教大俠:STM32F4XX是單指令乘法嗎?
    發(fā)表于 05-13 07:54

    STM32F4xx的ETH模塊連接LAN8720,能否把網(wǎng)口的發(fā)送和接收直接短接?

    STM32F4xx的ETH模塊,連接LAN8720,外接放大和網(wǎng)口,能否把網(wǎng)口的發(fā)送和接收直接短接,通過實(shí)現(xiàn)鏈路層協(xié)議,完成外圍電路的自測試?有沒有人這樣操作過?
    發(fā)表于 04-28 07:14

    stm32f4xx的CAN對(duì)ID配置有要求嗎?CAN收發(fā)器是什么型號(hào)的?

    stm32f4xx的CAN疑問: 1)標(biāo)準(zhǔn)幀收發(fā)時(shí),對(duì)CAN ID有特殊的要求或約束嗎?比如哪些CAN ID不能用? 2)CAN收發(fā)器是什么型號(hào)?對(duì)CAN數(shù)據(jù)鏈路層的編碼有特殊操作嗎?
    發(fā)表于 04-22 06:03

    STM32G4XX不能夠像STM32F1XX STM32F4XX那樣對(duì)GPIO進(jìn)行位帶操作呢?

    請(qǐng)教下,在STM32G4XX系列里面,GPIO掛載在AHB2總線上面,地址在0x4800 0000. 是不是也就意味著,STM32G4XX不能夠在像STM32F1XX STM32F4XX
    發(fā)表于 03-21 07:16

    是否有可能使用CYSPP配置文件連接到外圍設(shè)備?

    我們的現(xiàn)有系統(tǒng)使用中央和外圍設(shè)備,使用基于 Microchip RN4020 的中央和外圍設(shè)備。 由于供應(yīng)限制的原因,我們希望英飛凌 CYBT-483056 SoC 用于 BLE central。 我們想知道是否有可能使用CY
    發(fā)表于 03-01 06:54

    STM32F101xxSTM32F103xx ARM 內(nèi)核32位高性能微控制器參考手冊

    電子發(fā)燒友網(wǎng)站提供《STM32F101xxSTM32F103xx ARM 內(nèi)核32位高性能微控制器參考手冊.pdf》資料免費(fèi)下載
    發(fā)表于 01-29 09:25 ?7次下載

    Arm?Cortex?-M4 32位MCU GD32F303xx數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《Arm?Cortex?-M4 32位MCU GD32F303xx數(shù)據(jù)手冊.pdf》資料免費(fèi)下載
    發(fā)表于 01-14 09:49 ?8次下載
    <b class='flag-5'>Arm</b>?Cortex?-M<b class='flag-5'>4</b> 32位MCU GD32<b class='flag-5'>F303xx</b>數(shù)據(jù)手冊

    stm32f1如何外部中斷關(guān)掉hal

    STM32F1系列微控制器是STMicroelectronics制造的32位ARM Cortex-M3內(nèi)核的嵌入式微控制器系列。該系列采用了HAL(Hardware Abstraction
    的頭像 發(fā)表于 12-22 13:52 ?3105次閱讀

    怎樣減少變頻器對(duì)PLC與外圍設(shè)備通訊的干擾?

    怎樣減少變頻器對(duì)PLC與外圍設(shè)備通訊的干擾? 標(biāo)題:變頻器對(duì)PLC與外圍設(shè)備通訊干擾的減少方法 引言: 隨著工業(yè)自動(dòng)化技術(shù)的不斷發(fā)展,變頻器(Frequency Converter)作為一種控制電機(jī)
    的頭像 發(fā)表于 11-20 16:36 ?1243次閱讀

    RT-thread源碼移植到STM32F10x和STM32F4xx

    RT-thread源碼移植到STM32F10x和STM32F4xx: 一、源碼下載 點(diǎn)擊入門->下載 ? 在歷史版本里邊隨便選取一個(gè) ? 會(huì)進(jìn)入百度云盤的下載地址,里邊有全部版本的源碼。這里下載
    的頭像 發(fā)表于 11-15 09:38 ?2367次閱讀
    RT-thread源碼移植到<b class='flag-5'>STM32F</b>10x和<b class='flag-5'>STM32F4xx</b>