微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 连载五:eBox控制GPIO,简单,任性超乎想象!

连载五:eBox控制GPIO,简单,任性超乎想象!

时间:10-02 整理:3721RD 点击:

如何在eBox中使用GPIO


GPIO的重要性在系统设计中是最基础的部分,目前在各种平台的IO控制方法五花八门,各自有各自的方法。比如51系列、AVR系列、凌阳系列等等,即使STM32平台下,各个公司推出的开发板教程里面也是实现方法不一样。


为了统一这些差异性,方便用户使用,eBox推出了一套标准的控制方法,简单、通用、易懂、高效。eBox的系统中方便使用IO口设置的同时保证执行效率,这是一个最常用的类,他的效率极大的影响整个系统的运行。eBox中的IO反转效率是和官方固件库处于同一个水平的。最快的方法只需执行三条汇编指令。低效率的函数编译生成了五条汇编指令。效率几乎差了一倍之多。


先看看GPIO的类和GPIO的模式参数。

  1. class GPIO
  2. {
  3.         public:
  4.                 GPIO(GPIO_TypeDef   *port,uint16_t pin);
  5.                 void mode(PIN_MODE mode_val);
  6.                 void set();
  7.                 void reset();
  8.                 void write(uint8_t val);
  9.                 void read(uint8_t *val);
  10.         void toggle();        
  11.                 uint8_t read(void);
  12.         
  13.                 GPIO_TypeDef* port;
  14.                 uint16_t pin;
  15. };

复制代码

  1. typedef enum
  2. {
  3.     AIN         = 0x0,
  4.     INPUT       = 0x04,
  5.     INPUT_PD    = 0x28,
  6.     INPUT_PU    = 0x48,
  7.     OUTPUT_OD   = 0x14,
  8.     OUTPUT_PP   = 0x10,
  9.     AF_OD       = 0x1C,
  10.     AF_PP       = 0x18
  11. }PIN_MODE;

复制代码

好复杂啊。

这些已经被eBox封装起来了!用户不用去关心的。你要关心的是下面。

根据下面一个例程,来简单讲解下GPIO的控制。


  1. #include "ebox.h"
  2. void setup()
  3. {
  4.         ebox_init();
  5.         PB8.mode(OUTPUT_PP);//设置GPIO为推挽输出
  6. }
  7. int main(void)
  8. {
  9.         setup();
  10.         while(1)
  11.         {
  12.                 PB8.set();//set gpio high as 3.3v
  13.         delay_ms(500);
  14.                 PB8.reset();//set gpio low as 0v
  15.         delay_ms(500);
  16.         }
  17. }

复制代码


打开工程模板下面的example->digital->EdigitalWrite.cpp.将此文件内容拷贝到main.cpp中编译运行。就可以看到LED1在每隔1s闪烁一次。除了使用set和reset的方法外还可以使用write(写1或者0),toggle(翻转IO)来实现本程序的功能。


GPIO的模式:有很多种类型,本例程中需要设置的是OUTPUT_PP。


由于篇幅限制,无法详细介绍每一个函数的详细功能。会在eBox的标准API手册中详细讲解。其实不用介绍,从字面意思完全可以看出个所以然来!


使用eBox固件库翻转IO就是这么简单,任性!你还能看出这是STM32的编程吗?你还需要什么是寄存器吗?统统离我远一点!我就要这么简单!


新浪微博:eBox生态圈
微博主页:http://weibo.com/2632245415/profile?topnav=1&wvr=6

我的众筹项目地址:http://z.elecfans.com/30.html 期待大家一起来完善和发展eBox,打造国人自己的库,不仅仅支持STM32,更能支持飞思卡尔MCU、NXP MCU······




很好很强大,赞一个

支持小编,确实比较强大

优化了很多,使用更加方便。

搞不懂为什么要这么麻烦。固件库已经算是十分简单的了,我们这些用寄存器跟汇编的不是要上吊?!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top