100-SLM130(NB-IOT)C-SDK(OpenCPU)学习开发-GPIO输出高低电平,设置电平电压,关于休眠保持引脚
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnEC616_SLM130" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
注意带*号的, 开发板标识有误,按照最外围标识为准
说明
1,打开芯片数据手册
2,再说一下另一个事情
芯片的引脚是P0, P1, P2...口这样子的, 每个口有16个管脚,
即(P0_0 -- P0_15) (P1_0 -- P1_15) (P2_0 -- P2_15)
手册上面标识的 GPIO0 - GPIO15 其实是 P0_0 -- P0_15
手册上面标识的 GPIO16 - GPIO31 其实是 P1_0 -- P1_15
手册上面标识的 GPIO32 - GPIO47 其实是 P2_0 -- P2_15
设置GPIO3输出高低电平
#include "app.h" #include "bsp.h" #include "pad_ec616.h" #include "gpio_ec616.h" #define GPIO_PIN_NUMBER (3) //GPIO编号 #define GPIO_PORT (GPIO_PIN_NUMBER/16) //在哪个端口上(P0 / P1 / P2) #define GPIO_PIN (GPIO_PIN_NUMBER%16) //在端口上的编号 #define GPIO_PAD_INDEX (14) //引脚对应的PAD地址, 这个看手册哈 #define GPIO_PAD_ALT_FUNC (PAD_MuxAlt0) //使用其第几功能 void gpio_init(void) { /*配置GPIO的功能*/ pad_config_t padConfig; PAD_GetDefaultConfig(&padConfig); padConfig.mux = GPIO_PAD_ALT_FUNC;//设置使用其第几功能 PAD_SetPinConfig(GPIO_PAD_INDEX, &padConfig);//配置PAD PAD_SetPinPullConfig(GPIO_PAD_INDEX, PAD_InternalPullUp);//设置内部上下拉 /*配置GPIO的输入输出初始化*/ gpio_pin_config_t config; config.pinDirection = GPIO_DirectionOutput;//输出模式 config.misc.initOutput = 1;//初始输出高电平 GPIO_PinConfig(GPIO_PORT, GPIO_PIN, &config);//配置 } int value=0; void main_entry(void) { BSP_CommonInit();//官方底层初始化函数,默认写上就可以 gpio_init(); while (1) { value = value+1; if(value<10000) GPIO_PinWrite(GPIO_PORT, 1 << GPIO_PIN, 1 << GPIO_PIN); //设置GPIO输出高电平 else if (value<20000) GPIO_PinWrite(GPIO_PORT, 1 << GPIO_PIN, 0); //设置GPIO输出低电平 else if (value<30000) value=0; } }
程序说明
1,首先是配置其GPIO的功能
2,初始化GPIO
3,设置GPIO输出高低电平
输出高电平: GPIO_PinWrite(GPIO_PORT, 1 << GPIO_PIN, 1 << GPIO_PIN);
输出低电平: GPIO_PinWrite(GPIO_PORT, 1 << GPIO_PIN, 0);
按照上面那样子写就可以,不必深究, 因为最终也只不过是配置寄存器的某些位的数据而已.
4,假设设置GPIO19输出高低电平
设置管脚输出电压
#include "slpman_ec616.h"
设置AON2管脚
EC616芯片有6个休眠保持引脚
AON_GPIO1 - AON_GPIO6 分别对应这 GPIO20 - GPIO25
#include <stdio.h> #include "app.h" #include "bsp.h" #include "slpman_ec616.h" #include "bsp_custom.h" #include "pad_ec616.h" #include "gpio_ec616.h" #define GPIO_PIN_NUMBER (21) //GPIO编号 #define GPIO_PORT (GPIO_PIN_NUMBER/16) //在哪个端口上(P0 / P1 / P2) #define GPIO_PIN (GPIO_PIN_NUMBER%16) //在端口上的编号 //可以不用配置PAD // #define GPIO_PAD_INDEX (33) //引脚对应的PAD地址, 这个看手册哈 // #define GPIO_PAD_ALT_FUNC (PAD_MuxAlt0) //使用其第几功能 void gpio_init(void) { /*配置GPIO的功能*/ // pad_config_t padConfig; // PAD_GetDefaultConfig(&padConfig); // padConfig.mux = GPIO_PAD_ALT_FUNC;//设置使用其第几功能 // PAD_SetPinConfig(GPIO_PAD_INDEX, &padConfig);//配置PAD // PAD_SetPinPullConfig(GPIO_PAD_INDEX, PAD_InternalPullUp);//设置内部上下拉 /*配置GPIO的输入输出初始化*/ gpio_pin_config_t config; config.pinDirection = GPIO_DirectionOutput;//输出模式 config.misc.initOutput = 1;//初始输出高电平 GPIO_PinConfig(GPIO_PORT, GPIO_PIN, &config);//配置 } void main_entry(void) { BSP_CommonInit();//官方底层初始化函数,默认写上就可以 BSP_CustomInit();//配置串口打印 slpManAONIOPowerOn();//使能AON引脚 slpManAONIOLatchEn(AonIOLatch_Enable);//是否在模组休眠时保持 slpManAONIOVoltSet(IOVOLT_3_30V);//设置AON引脚电平 gpio_init(); while (1) { } }