中科蓝讯蓝牙: 通用IO(GPIO)一般操作

您所在的位置:网站首页 蓝牙耳机a3芯片引脚定义 中科蓝讯蓝牙: 通用IO(GPIO)一般操作

中科蓝讯蓝牙: 通用IO(GPIO)一般操作

2024-07-12 01:44| 来源: 网络整理| 查看: 265

目录

1. GPIO 常用寄存器:

2. 常见输入输出示例:

3. 关于GPIOASET/GPIOACLR:

1. GPIO 常用寄存器:

如下(以GPIOA为例子):

GPIOAFEN: 设置为0表示作为通用IO(GPIO)使用   //设置为1表示做其它功能性IO,如串口/SPI.. GPIOADE: 数字IO使能: 0为模拟IO, 1 为数字IO,    //如作为AUX输入的IO口就需要设置成模拟IO, 减少数字IO对AUX的干扰. GPIOADIR: 控制IO的方向:  1为输入, 0为输出. GPIOA : IO方向为输入时,读此寄存器的值即得到引脚的高低状态  //IO为输出时, 写此寄存器的高低即设置对应引脚的高低输出. GPIOADRV: 0 输出驱动为8mA   //1 输出驱动为32 mA   //IO方向为输出且是数字IO时有效    //以下寄存器控制上拉或下拉, 注意只有当IO设置为输入时, 上下拉才有效.  //IO方向为输出时上下拉自动无效   GPIOAPU          //10K上拉使能 GPIOAPD          //10K下拉使能 GPIOAPU200K      //200K上拉使能 GPIOAPD200K      //200K下拉使能 GPIOAPU300       //300欧上拉使能 GPIOAPD300       //300欧下拉使能

2. 常见输入输出示例:

1) PA0输出高低(点LED灯)示例

//正常启动Main函数 int main(void) { printf("Hello AB5300\n"); //示例开始 GPIOAFEN &= ~BIT(0); //PA0作为GPIO使用 GPIOADE |= BIT(0); //PA0设置为数字IO GPIOADIR &= ~BIT(0); //PA0方向设置为输出 WDT_DIS(); //测试代码,关看门狗,防止看门狗复位 while(1) { GPIOA |= BIT(0); //PA0输出高, 等效于GPIOASET = BIT(0); delay_ms(100); GPIOA &= ~BIT(0); //PA0输出低, 等效于GPIOACLR = BIT(0); delay_ms(100); }

2) 得到PA0引脚状态(作用输入)示例

int main(void) { printf("Hello AB5300\n"); //示例开始 GPIOAFEN &= ~BIT(0); //PA0作为GPIO使用 GPIOADE |= BIT(0); //PA0设置为数字IO GPIOADIR |= BIT(0); //PA0方向设置为输入 GPIOAPU |= BIT(0); //作为输入,为了有稳定的输入状态(1或0),在外部没上拉或下拉时,需要根据实际情况开内部上拉或下拉 WDT_DIS(); //测试关看门狗,防止看门狗复位 while(1) { delay_ms(100); printf("GPIOA0 = 0x%X\n",GPIOA & BIT(0)); //打印读到的PA0状态 } 3. 关于GPIOASET/GPIOACLR:

优化输出使用的特殊寄存器, 它们只对写入为1的位有效, 写入为0的位是不影响它以前的状态

GPIOASET: 把设置为1的位置1. 设置为0的位不影响以前的状态.

GPIOACLR: 把设置为1的位置0. 设置为0的位不影响以前的状态.

使用方法如:  GPIOASET = BIT(0);    //PA0输出高, 等效于 GPIOA |= BIT(0); GPIOACLR = BIT(0);    //PA0输出低, 等效于GPIOA &= ~BIT(0);   

优化原理: 如程序把IO设置为高, 一般这样写GPIOA |= BIT(0);   这里实际上有三个步骤:   1) 先读出GPIOA.  2) 再把GPIOA | BIT(0);  3) 把或后的结果再写回GPIOA 而使用GPIOASET等效优化后, 直一条指令GPIOASET = BIT(0);即达到 上面三步才能达到的效果.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3