0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样将STM32F4xx标准外围设备库与MikroC Pro for ARM集成

454398 来源:网络整理 作者:网络整理 2019-12-05 16:38 次阅读

STM32F4xx系列微处理器比市场上同类产品先进得多。除了是快速的32位MCU,STM32F4还具有丰富的硬件外设支持以及DSP引擎优势。就功能和价格而言,STM32F4是全胜者。最近,STM32用户社区激增。 STM32 Discovery开发板正在以前所未有的速度增长。最近,我几次收到读者关于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发现。 ST Microelectronics的该板 某种程度上是STM32F4系列的旗舰Discovery板,并且非常受欢迎。最后,您将需要我包含在示例中的STM32F4xxx SPL。修改其中的文件以使其与MikroC环境兼容。

要做的事情

首先,我们需要准备用于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(在撰写本文时为最新版本),请跳过此部分。

接下来,我们必须更改编译器的某些选项。启动编译器,并如下所示:

工具》》选项》》输出设置

检查 区分大小写 。应用并关闭此窗口。如果您之前已经做过,请再次跳过此部分。

从现在开始要谨慎命名和字母大小写,因为编译器现在对此很敏感,否则您将注定要陷入编程不幸的深渊。只是一个简单但有用的提示-在进行一些编辑或修改后,很少会编译您的代码。这将极大地帮助您调试一小段编码窗口中的微小错误。

最后将SPL保持在安全的位置。每当您使用SPL编码新项目时,都应从该位置复制该新项目并与该项目一起使用。这样可以确保原始的SPL副本不会被意外修改。

使用SPL编码

示例代码只是另一个闪烁的代码示例,可以满足要求。我不会告诉您如何在MikroC中创建新项目。我想这是众所周知的。创建一个新项目,并使用 项目管理器 添加SPL文件夹中的所有源文件和头文件。您可以仅添加所需外围设备的头文件和源文件,也可以添加所有文件(如果不确定哪个代表哪个)。前一种方法比后者花费更少的编译时间。另外,添加 defines.pld 项目级别定义文件。现在您可以使用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库。这些甚至更易于使用。有时图书馆是救星,而有时它们是诅咒。有时您不想重新发明“轮子”,但您当然想用它制造汽车,而我的朋友比什么都值钱。在这一点上,我不想就此事进一步辩论。我将这个选择留给用户。

文件:将STM32F4xx标准外围设备库与MikroC Pro for ARM集成。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49048
  • STM32F4xx
    +关注

    关注

    0

    文章

    15

    浏览量

    12756
收藏 人收藏

    评论

    相关推荐

    从MSP430F4xx迁移到MSP430FR4xx系列

    电子发烧友网站提供《从MSP430F4xx迁移到MSP430FR4xx系列.pdf》资料免费下载
    发表于 10-10 11:34 0次下载
    从MSP430<b class='flag-5'>F4xx</b>迁移到MSP430FR<b class='flag-5'>4xx</b>系列

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

    GD32F4xx 系列 MCU 是基于 Arm® Cortex®-M4 处理器的 32 位通用微控制器,与 STM32F4xx系列 MCU 保持高度兼容。本文主要从以下三个方面进行介绍
    的头像 发表于 09-06 09:40 970次阅读
    【GD32 MCU 移植教程】8、从 <b class='flag-5'>STM32F4xx</b> 系列移植到 GD32<b class='flag-5'>F4xx</b> 系

    STM32CubeIDE编译工程报错如何解决?

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

    STM32F10xx芯片资料

    电子发烧友网站提供《STM32F10xx芯片资料.pdf》资料免费下载
    发表于 07-08 14:56 1次下载

    STM32F10x标准外设参考手册

    STM32F10x标准外设参考手册
    发表于 06-24 09:26 11次下载

    请问STM32F4XX系列USB的usb_regs.h文件有什么用处?

    STM32F4XX 系列USB的usb_regs.h文件有什么用处?
    发表于 05-17 06:13

    请问STM32F4XX是单指令乘法吗?

    请教大侠:STM32F4XX是单指令乘法吗?
    发表于 05-13 07:54

    STM32F4xx的ETH模块连接LAN8720,能否把网口的发送和接收直接短接?

    STM32F4xx的ETH模块,连接LAN8720,外接放大和网口,能否把网口的发送和接收直接短接,通过实现链路层协议,完成外围电路的自测试?有没有人这样操作过?
    发表于 04-28 07:14

    stm32f4xx的CAN对ID配置有要求吗?CAN收发器是什么型号的?

    stm32f4xx的CAN疑问: 1)标准帧收发时,对CAN ID有特殊的要求或约束吗?比如哪些CAN ID不能用? 2)CAN收发器是什么型号?对CAN数据链路层的编码有特殊操作吗?
    发表于 04-22 06:03

    STM32G4XX不能够像STM32F1XX STM32F4XX那样对GPIO进行位带操作呢?

    请教下,在STM32G4XX系列里面,GPIO挂载在AHB2总线上面,地址在0x4800 0000. 是不是也就意味着,STM32G4XX不能够在像STM32F1XX STM32F4XX
    发表于 03-21 07:16

    是否有可能使用CYSPP配置文件连接到外围设备

    我们的现有系统使用中央和外围设备,使用基于 Microchip RN4020 的中央和外围设备。 由于供应限制的原因,我们希望英飞凌 CYBT-483056 SoC 用于 BLE central。 我们想知道是否有可能使用CY
    发表于 03-01 06:54

    PSOC6如何通过I2C与外围设备通信?

    PSOC6 如何通过 I2C 与外围设备通信? 我不太明白这一系列芯片 CAN 如何向上或向下拉动?我根据例程编写了一个与I2C通信的外围设备,但它 CAN不起作用, ADXL345模块
    发表于 01-31 06:08

    STM32F101xxSTM32F103xx ARM 内核32位高性能微控制器参考手册

    电子发烧友网站提供《STM32F101xxSTM32F103xx ARM 内核32位高性能微控制器参考手册.pdf》资料免费下载
    发表于 01-29 09:25 7次下载

    Arm®Cortex®-M4 32位MCU GD32F303xx数据手册

    电子发烧友网站提供《Arm®Cortex®-M4 32位MCU GD32F303xx数据手册.pdf》资料免费下载
    发表于 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
    的头像 发表于 12-22 13:52 3202次阅读