GPIO相关
📎 原始文档:https://www.kdocs.cn/l/cgJBqCDumZaJ GPIO相关
- GPIO定义 GPIO(general porpose intput output):通用输入输出端口的简称。通俗来说就是芯片上的常用引脚,可以通过软件进行控制引脚的高低电平或者读取外部输入的电平。
二、GPIO 的工作模式
1. 输入模式
输入模式可以配置为模拟、上拉、下拉以及浮空模式。
2. 输出模式 输出模式既是IO 配置为输出,可以伴随有上拉、下拉、浮空等输出。
三、GPIO的接口函数说明
- AC695N系列 和JL701N接口:
gpio_set_direction() //设置IO的方向,第二个参数:1输入,0输出
gpio_set_pull_up() //设置上拉电阻的使能,第二个参数:1开启,0关闭
gpio_set_pull_down()// 设置下拉电阻的使能,第二个参数:1开启,0关闭
gpio_set_output_value() //设置输出电压水平,第二个参数:1高,0低
gpio_set_die(), gpio_set_dieh()// 设置IO的状态,第二个参数:1数字态,0模拟态
gpio_set_hd0(), gpio_set_hd() //设置IO的能力,第二个参数:1强输出,0普通输出
gpio_read() //输入数字态下读取电压水平,返回值:1是高,0是低
2、JL707N系列接口:
707N系列的每个GPIO的上拉和下拉都报三种阻值可以配置,分别是上拉10K/100K/1M的阻值;下拉10K/100K/1M的阻值;在软件使用的时候注意配置即可。
int gpio_init(enum gpio_port port, const struct gpio_config *config);//配置同组多个io模式及强驱. 形参详见枚举; pin:PORT_PIN_0 or PORT_PIN_0 | PORT_PIN_2等
int gpio_deinit(enum gpio_port port, u32 pin);//恢复同组多个io为高阻态. 形参详见枚举; pin:PORT_PIN_0 or PORT_PIN_0 | PORT_PIN_2等
int gpio_set_mode(enum gpio_port port, u32 pin, enum gpio_mode mode);//配置同组多个io模式. 形参详见枚举; pin:PORT_PIN_0 or PORT_PIN_0 | PORT_PIN_2等
int gpio_read(u32 gpio);// 读取单个io输入值. gpio:IO_PORTA_00
四、GPIO输入输出DEMO
- AC695N和JL701N
GPIO输出高:
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_direction(IO_PORTA_04, 0);
gpio_set_output_value(IO_PORTA_04,1);
GPIO输出低:
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_direction(IO_PORTA_04, 0);
gpio_set_output_value(IO_PORTA_04,0);
GPIO强驱输出高:
/* ************* 强驱输出 一档 ******************* */
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_direction(IO_PORTA_04, 0);
gpio_set_hd0(IO_PORTA_04,1);///强驱一档
gpio_set_output_value(IO_PORTA_04,1);
/* ************* 强驱输出 二档 ******************* */
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_direction(IO_PORTA_04, 0);
gpio_set_hd(IO_PORTA_04,1);///强驱二档
gpio_set_output_value(IO_PORTA_04,1);
/* ************* 强驱输出 三档 ******************* */
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_direction(IO_PORTA_04, 0);
gpio_set_hd0(IO_PORTA_04,1);
gpio_set_hd(IO_PORTA_04,1);
gpio_set_output_value(IO_PORTA_04,1);
GPIO输入:
下拉输入:
/* ************* 下拉输入 ******************* */
gpio_direction_input(IO_PORTA_04);
gpio_set_pull_down(IO_PORTA_04, 1);
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_die(IO_PORTA_04, 1);
上拉输入:
/* ************* 上拉输入 ******************* */
gpio_direction_input(IO_PORTA_04);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_pull_up(IO_PORTA_04, 1);
gpio_set_die(IO_PORTA_04, 1);
GPIO高阻态:
/* ************* 高阻态 ******************* */
gpio_set_die(IO_PORTA_04, 0);
gpio_set_dieh(IO_PORTA_04, 0);
gpio_set_pull_up(IO_PORTA_04, 0);
gpio_set_pull_down(IO_PORTA_04, 0);
gpio_set_direction(IO_PORTA_04, 1);
2、JL707N
GPIO输出高:
/* ************* 输出高 ******************* */
gpio_set_mode(PORTA, BIT(4), PORT_OUTPUT_HIGH);
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_OUTPUT_HIGH);
GPIO强驱输出:
/* ************* 驱动能力输出2.4mA ******************* */
gpio_set_drive_strength(IO_PORT_SPILT(IO_PORTA_04), PORT_DRIVE_STRENGT_2p4mA);
/* ************* 驱动能力输出8mA ******************* */
gpio_set_drive_strength(IO_PORT_SPILT(IO_PORTA_04), PORT_DRIVE_STRENGT_8p0mA);
/* ************* 驱动能力输出24mA ******************* */
gpio_set_drive_strength(IO_PORT_SPILT(IO_PORTA_04), PORT_DRIVE_STRENGT_24p0mA);
/* ************* 驱动能力输出64mA ******************* */
gpio_set_drive_strength(IO_PORT_SPILT(IO_PORTA_04), PORT_DRIVE_STRENGT_64p0mA);
GPIO输出低:
/* ************* 输出低 ******************* */
gpio_set_mode(PORTA, BIT(4), PORT_OUTPUT_LOW);
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_OUTPUT_LOW);
GPIO输入:
下拉输入:
/* ************* 下拉10K 输入******************* */
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_INPUT_PULLDOWN_10K);
/* ************* 下拉100K 输入******************* */
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_INPUT_PULLDOWN_100K);
/* ************* 下拉1M 输入******************* */
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_INPUT_PULLDOWN_1M);
上拉输入:
/* ************* 上拉10K 输入******************* */
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_INPUT_PULLUP_10K);
/* ************* 上拉100K 输入******************* */
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_INPUT_PULLUP_100K);
/* ************* 上拉1M 输入******************* */
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_INPUT_PULLUP_1M);
GPIO高阻态:
/* ************* 高阻态 ******************* */
gpio_set_mode(PORTA, BIT(4), PORT_HIGHZ);
gpio_set_mode(IO_PORT_SPILT(IO_PORTA_04), PORT_HIGHZ);