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)
    {

    }
}

 

posted on 2022-04-25 16:45  广源时代  阅读(392)  评论(0编辑  收藏  举报

导航

支付宝 QQ群