概述
本篇文章介绍如何使用中科蓝汛AB5681,GPIO管脚使用说明。
一、第一种写法
1)、GPIO配置输入模式
//内部上拉
GPIOBDE |= BIT(4); //数字IO使能: 0为模拟IO, 1 为数字IO
GPIOBDIR |= BIT(4); //控制IO的方向: 0为输出, 1为输入.
GPIOBFEN &= ~BIT(4);//0:当作通用GPIO使用 //1:当作其它功能性IO
GPIOBPU |= BIT(4); //10K上拉使能
2)、GPIO配置输出模式
GPIOBDE |= BIT(4); //数字IO使能: 0为模拟IO, 1 为数字IO
GPIOBDIR &= ~BIT(4); //控制IO的方向: 0为输出, 1为输入.
GPIOBFEN &= ~BIT(4);//0:当作通用GPIO使用 //1:当作其它功能性IO
GPIOBSET |= BIT(4); // 将PB4 引脚设置输出高
GPIOBCLR |= BIT(4); // 将PB4 引脚设置输出低
GPIOBDRV &= ~BIT(4); // 小电流 具体看手册
GPIOBDRV |= BIT(4); // 大电流 具体看手册
3)、gpio口定义:
4)、以AB5681为例:(数据手册 AB568X UserManual.pdf)
二、第二种写法
void gpio_output_h(u8 io_num)
{gpio_t gpio;bsp_gpio_cfg_init(&gpio, io_num);if (gpio.sfr) {gpio.sfr[GPIOxFEN] &= ~BIT(gpio.num);gpio.sfr[GPIOxDE] |= BIT(gpio.num);gpio.sfr[GPIOxDIR] &= ~BIT(gpio.num);gpio.sfr[GPIOxSET] = BIT(gpio.num);//gpio.sfr[GPIOxDRV] &= ~BIT(gpio.num); //小电流gpio.sfr[GPIOxDRV] = BIT(gpio.num); //大电流}
}void gpio_output_l(u8 io_num)
{gpio_t gpio;bsp_gpio_cfg_init(&gpio, io_num);if (gpio.sfr) {gpio.sfr[GPIOxFEN] &= ~BIT(gpio.num);gpio.sfr[GPIOxDE] |= BIT(gpio.num);gpio.sfr[GPIOxDIR] &= ~BIT(gpio.num);gpio.sfr[GPIOxCLR] = BIT(gpio.num);//gpio.sfr[GPIOxDRV] &= ~BIT(gpio.num); //小电流gpio.sfr[GPIOxDRV] = BIT(gpio.num); //大电流}
}void gpio_input(u8 io_num)
{gpio_t gpio;bsp_gpio_cfg_init(&gpio, io_num);if (gpio.sfr) {gpio.sfr[GPIOxFEN] &= ~BIT(gpio.num);gpio.sfr[GPIOxDE] |= BIT(gpio.num);gpio.sfr[GPIOxDIR] &= ~BIT(gpio.num);//gpio.sfr[GPIOxPU] |= BIT(gpio.num); //内部上拉gpio.sfr[GPIOxPD] |= BIT(gpio.num); //内部下拉}
}
三、调用
gpio_output_h(IO_PB4); //输出高电平
gpio_output_l(IO_PB4); //输出低电平
gpio_input(IO_PB4); //输入
四、总结
好了,介绍完毕希望能帮助到需要的人。