DA1458x使用之第一篇——GPIO

最近刚做完一个DA14580的项目,对这个芯片的使用也是有了一些心得,现在打算写出来,分享给大家。从最简单的GPIO开始吧,打算一天写一篇,大家有问题可以留言或者评论,互相交流。

 1.首先是GPIO引脚的定义,默认是在periph_setup.h这个文件里,引脚的定义如下,指定PORT和pin,
 //定义一个LED引脚,port为2,pin为5
 #define LED_PORT             GPIO_PORT_2
 #define LED_PIN                 GPIO_PIN_5
 //定义一个KEY引脚,port为2,pin为4
 #define KEY_PORT             GPIO_PORT_2
 #define KEY_PIN                 GPIO_PIN_4

 2.然后是GPIO引脚的初始化,引脚的初始化是在periph_setup.c里,格式如下
 GPIO_ConfigurePin( LED_PORT, LED_PIN, OUTPUT, PID_GPIO, false );
 GPIO_ConfigurePin( KEY_PORT, KEY_PIN, INPUT, PID_GPIO, false );
 GPIO_ConfigurePin里一共有四个参数,前两个是port和pin,第三个是指定IO口的输入输出方向,DA1458x的IO口输入输出方向一共有四种,悬空输入,上拉输入,下拉输入,输出(应该是push-pull),不知道为什么没有open drain输出,写软件I2C时不是很方便,以后的帖子里我会说DA1458x软件I2C的实现方法。这里LED就初始化为OUTPUT,KEY初始化为INPUT。
 typedef enum {
     INPUT = 0,
     INPUT_PULLUP = 0x100,
     INPUT_PULLDOWN = 0x200,
     OUTPUT = 0x300,
 } GPIO_PUPD;
 最后一个参数是ture或者false,当输入输出方向为输出时,选择IO默认初始化之后的电平,比如为true时,初始化后,IO口就会输出高电平。
 3.GPIO输入输出方向为输出时的使用
 点亮一个LED
 GPIO_SetActive(LED_PORT, LED_PIN);
 熄灭LED
 GPIO_SetInactive(LED_PORT, LED_PIN);
 4.GPIO输入输出方向为输入时的使用
 用GPIO_GetPinStatus()来获取指定port和pin的IO的当前输入电平
 if(GPIO_GetPinStatus(KEY_PORT, KEY_PIN) == 0)
 {
      delay();     //加个延时防抖
      if(GPIO_GetPinStatus(KEY_PORT, KEY_PIN) == 0)
     {
           //operation
     }
 }
 5.IO口的使用就这些内容吧,需要注意一点的是如果DA1458x定义了睡眠,如下,
 /*Sleep modes*/
 #define CFG_EXT_SLEEP
 那么当你想要保持输出电平时,就需要先disable睡眠
 app_disable_sleep();
 这样输出电平才可以保持,不然的话当DA1458x已进入睡眠,IO口就会被释放掉,输出电平就没了。
 可以用如下程序恢复睡眠
 app_set_extended_sleep();


 关于GPIO的部分就写到这里,以后发现不对或者不足的地方,我会及时更新。

猜你喜欢

转载自blog.csdn.net/dddxxxx/article/details/79947041