连载五:eBox控制GPIO,简单,任性超乎想象!
如何在eBox中使用GPIO
GPIO的重要性在系统设计中是最基础的部分,目前在各种平台的IO控制方法五花八门,各自有各自的方法。比如51系列、AVR系列、凌阳系列等等,即使STM32平台下,各个公司推出的开发板教程里面也是实现方法不一样。
为了统一这些差异性,方便用户使用,eBox推出了一套标准的控制方法,简单、通用、易懂、高效。eBox的系统中方便使用IO口设置的同时保证执行效率,这是一个最常用的类,他的效率极大的影响整个系统的运行。eBox中的IO反转效率是和官方固件库处于同一个水平的。最快的方法只需执行三条汇编指令。低效率的函数编译生成了五条汇编指令。效率几乎差了一倍之多。
先看看GPIO的类和GPIO的模式参数。
- class GPIO
- {
- public:
- GPIO(GPIO_TypeDef *port,uint16_t pin);
- void mode(PIN_MODE mode_val);
- void set();
- void reset();
- void write(uint8_t val);
- void read(uint8_t *val);
- void toggle();
- uint8_t read(void);
-
- GPIO_TypeDef* port;
- uint16_t pin;
- };
- typedef enum
- {
- AIN = 0x0,
- INPUT = 0x04,
- INPUT_PD = 0x28,
- INPUT_PU = 0x48,
- OUTPUT_OD = 0x14,
- OUTPUT_PP = 0x10,
- AF_OD = 0x1C,
- AF_PP = 0x18
- }PIN_MODE;
好复杂啊。
这些已经被eBox封装起来了!用户不用去关心的。你要关心的是下面。
根据下面一个例程,来简单讲解下GPIO的控制。
- #include "ebox.h"
- void setup()
- {
- ebox_init();
- PB8.mode(OUTPUT_PP);//设置GPIO为推挽输出
- }
- int main(void)
- {
- setup();
- while(1)
- {
- PB8.set();//set gpio high as 3.3v
- delay_ms(500);
- PB8.reset();//set gpio low as 0v
- delay_ms(500);
- }
- }
打开工程模板下面的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······
很好很强大,赞一个
支持小编,确实比较强大
优化了很多,使用更加方便。
搞不懂为什么要这么麻烦。固件库已经算是十分简单的了,我们这些用寄存器跟汇编的不是要上吊?!