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

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集成。


PCBA加工的表面组装方法有哪些?
国科微全固态硬盘入选中国品牌日电子信息行业国货新品推广目录
9.43亿!方正科技拟在泰国新建PCB智造基地项目
双11最强的电视盒子是哪款?2022电视盒子排名新鲜出炉
电源变压器方式和开关方式的优缺点
怎样将STM32F4xx标准外围设备库与MikroC Pro for ARM集成
国产74系列逻辑8位同步二进制下计数器
!供应/维修HP8593E频谱分析仪HP 8593E小兵/罗
如何轻松几步实现在STM32上运行FreeRTOS任务
Apple的新iPad Air将开始预订
关于重量变送器的误差类型的介绍分析
健康教育照明市场爆发在即
采用DSP和GC5322芯片实现数字预失真校正系统的设计,简化实现难度
Fairchild车载FL7734可调光LED照明解决方案
电连接器的作用是什么
带有密码的Arduino门锁的制作
传统LED整体平淡 Mini/Micro LED等先进技术正逐步渗透
公司为人工智能和自动化革命应做好哪些准备
微软宣布推出Windows 10物联网核心服务
芯翼信息科技携基于XY100的NB-IoT智能模组及行业应用终端精彩亮相MWC上海展