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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣將STM32F4xx標準外圍設備庫與MikroC Pro for ARM集成

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-12-05 16:38 ? 次閱讀

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

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

所需的工具

首先,您需要MikroC Pro for ARM。該編譯器的演示版本提供8k代碼限制,足以滿足第一手ARM經驗。您需要一塊STM32F4xx板。我使用了STM32F407VG發(fā)現。 ST Microelectronics的該板 某種程度上是STM32F4系列的旗艦Discovery板,并且非常受歡迎。最后,您將需要我包含在示例中的STM32F4xxx SPL。修改其中的文件以使其與MikroC環(huán)境兼容。

要做的事情

首先,我們需要準備用于ARM編譯器的MikroC PRO,以鏈接SPL。我假設編譯器已預先安裝。首先轉到編譯器的安裝文件夾,然后找到 include 文件夾。就我而言,它是: C: Users Public Documents Mikroelektronika mikroC PRO for ARM Include 。

在此文件夾中,有一個名為 stdint.h的文件。將其重命名為 stdint(備份).h 并從提供的文件夾中復制新的 stdint.h 文件到這個位置。如果您在上一篇文章中已經這樣做,或者已升級到MikroC Pro for ARM版本4.15(在撰寫本文時為最新版本),請?zhí)^此部分。

接下來,我們必須更改編譯器的某些選項。啟動編譯器,并如下所示:

工具》》選項》》輸出設置

檢查 區(qū)分大小寫 。應用并關閉此窗口。如果您之前已經做過,請再次跳過此部分。

從現在開始要謹慎命名和字母大小寫,因為編譯器現在對此很敏感,否則您將注定要陷入編程不幸的深淵。只是一個簡單但有用的提示-在進行一些編輯或修改后,很少會編譯您的代碼。這將極大地幫助您調試一小段編碼窗口中的微小錯誤。

最后將SPL保持在安全的位置。每當您使用SPL編碼新項目時,都應從該位置復制該新項目并與該項目一起使用。這樣可以確保原始的SPL副本不會被意外修改。

使用SPL編碼

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

請注意,由于MikroElektronika尚未正式集成SPL,因此您會注意到紅色帶有SPL的代碼各部分下的錯誤標記。這并不罕見,也不是錯誤。所以不用擔心。

代碼:

#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。

我個人還沒有到目前為止,我一直依賴SPL,而且我相信原始級別的編碼學習。 SPL允許在STM32領域中輸入教科書。難怪它使編碼變得容易,但是在我看來,它的不利影響是它的用戶花在參考手冊和數據表上的時間更少。反過來,這將影響他們獲得對內部硬件外圍設備及其工作原理的扎實學習。如果SPL通過這種方式使生活變得輕松,那為什么不使用MikroC庫。這些甚至更易于使用。有時圖書館是救星,而有時它們是詛咒。有時您不想重新發(fā)明“輪子”,但您當然想用它制造汽車,而我的朋友比什么都值錢。在這一點上,我不想就此事進一步辯論。我將這個選擇留給用戶。

文件:將STM32F4xx標準外圍設備庫與MikroC Pro for ARM集成。

責任編輯:wv

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

    關注

    1

    文章

    1608

    瀏覽量

    48979
  • STM32F4xx
    +關注

    關注

    0

    文章

    15

    瀏覽量

    12747
收藏 人收藏

    評論

    相關推薦

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

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

    STM32F10x標準外設參考手冊

    STM32F10x標準外設參考手冊
    發(fā)表于 06-24 09:26 ?11次下載

    請問STM32F4XX系列USB的usb_regs.h文件有什么用處?

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

    請問STM32F4XX是單指令乘法嗎?

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

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

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

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

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

    STM32G4XX不能夠像STM32F1XX STM32F4XX那樣對GPIO進行位帶操作呢?

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

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

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

    STM32F101xxSTM32F103xx ARM 內核32位高性能微控制器參考手冊

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

    Arm?Cortex?-M4 32位MCU GD32F303xx數據手冊

    電子發(fā)燒友網站提供《Arm?Cortex?-M4 32位MCU GD32F303xx數據手冊.pdf》資料免費下載
    發(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>數據手冊

    stm32f1如何外部中斷關掉hal

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

    怎樣減少變頻器對PLC與外圍設備通訊的干擾?

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

    RT-thread源碼移植到STM32F10x和STM32F4xx

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

    基于ARM的32位MCU STM32F103xx數據手冊

    電子發(fā)燒友網站提供《基于ARM的32位MCU STM32F103xx數據手冊.pdf》資料免費下載
    發(fā)表于 11-09 09:47 ?0次下載
    基于<b class='flag-5'>ARM</b>的32位MCU <b class='flag-5'>STM32F103xx</b>數據手冊

    串聯(lián)外圍設備接口通信原理是什么?

    串聯(lián)外圍設備接口(SPI)通信原理是基于哪些具體的通信協(xié)議或工作方式
    發(fā)表于 10-28 07:16