[经验] 【eBox生态圈】连载五:eBox控制GPIO,简单,任性超乎想象!

[复制链接]
发表于 2015-9-29 18:31:15   2129 查看 4 回复 显示全部楼层 倒序浏览
分享

如何在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······






标签:stm32 stm32 stm32 stm32 stm32

技术员

发表于 2015-10-19 17:07:36  
很好很强大,赞一个
回复

点赞 举报

技术员

发表于 2015-11-30 16:10:34  
支持楼主,确实比较强大
回复

点赞 举报

工程师

发表于 2015-12-25 11:31:53  
优化了很多,使用更加方便。
回复

点赞 举报

技术员

发表于 2015-12-27 12:16:17  
搞不懂为什么要这么麻烦。。固件库已经算是十分简单的了,我们这些用寄存器跟汇编的不是要上吊?!
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

MSP430技术论坛

FPGA|CPLD|ASIC论坛

STM32/STM8技术论坛

NXP MCU 技术论坛

PIC单片机论坛

DSP论坛

瑞萨单片机论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

工程资源中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

电子展览展会专区

芯片求购|供应发布区