中科蓝讯蓝牙: 通用IO(GPIO)一般操作 |
您所在的位置:网站首页 › 蓝牙耳机a3芯片引脚定义 › 中科蓝讯蓝牙: 通用IO(GPIO)一般操作 |
目录 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 |