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

    文章

    1577

    浏览量

    48614
  • STM32F4xx
    +关注

    关注

    0

    文章

    15

    浏览量

    12688
收藏 人收藏

    评论

    相关推荐

    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

    怎样减少变频器对PLC与外围设备通讯的干扰?

    怎样减少变频器对PLC与外围设备通讯的干扰? 标题:变频器对PLC与外围设备通讯干扰的减少方法 引言: 随着工业自动化技术的不断发展,变频器(Frequency Converter)作为一种控制电机
    的头像 发表于 11-20 16:36 839次阅读

    串联外围设备接口通信原理是什么?

    串联外围设备接口(SPI)通信原理是基于哪些具体的通信协议或工作方式
    发表于 10-28 07:16

    STM32F103xC, STM32F103xD, STM32F103xE介绍

    的节能模式允许设计低功耗应用程序。 这些功能使STM32F103xx高密度高性能线路微控制器适用于广泛应用的系列,医疗和手持设备、PC和游戏外围设备、GPS平台、工业应用程序、PLC、逆变器、打印机、扫描仪、报警系统、视频对讲和
    发表于 10-10 08:04

    AN4013相关资料介绍

    本文件: ● 概述了STM32F1xxSTM32F22xxSTM32F2xx中的定时器外围设备STM32F4xx
    发表于 10-10 06:30

    32位基于ARM微控制器STM32F101xxSTM32F103xx的固件函数

    本手册介绍了 32 位基于 ARM 微控制器 STM32F101xxSTM32F103xx 的固件函数。该函数是一个固件函数包,它
    发表于 09-28 08:05

    STM32F4xx的中文参考手册

    STM32F4xx中文参考手册
    发表于 09-25 06:52

    使用STM32F2xxSTM32F4xx微控制器时如何提高ADC精度

    电子发烧友网站提供《使用STM32F2xxSTM32F4xx微控制器时如何提高ADC精度.pdf》资料免费下载
    发表于 09-21 11:26 0次下载
    使用<b class='flag-5'>STM32F2xx</b>和<b class='flag-5'>STM32F4xx</b>微控制器时如何提高ADC精度

    如何使用STM32G4系列微控制器存储器和外围设备

    本参考手册面向应用程序开发人员。它提供了关于如何使用STM32G4系列微控制器存储器和外围设备STM32G4系列是一系列具有不同内存大小和封装的微控制器以及外围设备。 有关订购信息
    发表于 09-08 06:59

    KW45B41Z/K32W148-将OTAP客户服务集成到蓝牙LE外围设备

    电子发烧友网站提供《KW45B41Z/K32W148-将OTAP客户服务集成到蓝牙LE外围设备.pdf》资料免费下载
    发表于 08-16 16:34 0次下载
    KW45B41Z/K32W148-将OTAP客户服务<b class='flag-5'>集成</b>到蓝牙LE<b class='flag-5'>外围设备</b>

    Arm访问内存映射的外围设备

    在大多数Arm嵌入式系统中,外围设备位于内存中的特定地址。通常,一个C变量映射到内存映射外设的每个寄存器上,然后使用指向该变量的指针来读取和写入寄存器是很方便的。在代码中,您不仅必须考虑寄存器
    发表于 08-02 18:26

    关于STM32外围设备的项目

    这是一个关于STM 32外围设备的项目。我在这个项目上工作了一段时间,终于可以向你介绍若要使用STM 32或本例中的STM32F411板,可与其他设备进行通信,如LCD屏幕、USB和计算机使用基本的通讯协议,如I2C,SPI或U
    发表于 07-07 14:40 3次下载
    关于<b class='flag-5'>STM32</b><b class='flag-5'>外围设备</b>的项目

    PLC如何正确的连接外围设备

    PLC外围设备指什么呢?指按钮、各种传感器等、继电器、接触器、电磁阀等输入输出模块,主要是为了扩充PLC的功能。那么如何正确的连接这些外围设备呢?一起来看看吧:
    发表于 05-23 11:52 646次阅读
    PLC如何正确的连接<b class='flag-5'>外围设备</b>?

    MCUXpresso查看GPIO值,外围设备视图是空的的原因?

    我需要查看 GPIO 值,但外围设备视图是空的。需要做什么来填充外围设备视图?我真的希望不要使用 NXP Semiconductors MCU 应用程序调试器,因为我的调试会话需要支持在闪存中保留一些空间。我正在使用 GDB PEMicro 调试器。
    发表于 05-09 10:00