IO口冲突处理
高阻态处理
有些芯片一个引脚中绑定了两个IO口,需要做以下处理:
假设要使用三号管脚的PC3来做输出输入,则需要把USBDM引脚置高阻态;假设要把USBDM拿来做输出输入,则需要把PC3置高阻态。
其他双绑引脚也是一样的,如第五号管脚,假设要用5号管脚来做MIC输入,则需要把PB13和PA3都置高阻态。置高阻态的语句如下:
普通GPIO
JL_PORTB->DIR |= BIT(3);
JL_PORTB->PU &= ~BIT(3);
JL_PORTB->PD &= ~BIT(3);
JL_PORTB->DIE |= BIT(3);
USB口
USB_DM_PU(0);
USB_DM_PD(0);
USB_DM_DIR(1);
PR口
PORTR_PU(PORTR1,0);
PORTR_PD(PORTR1,0);
PORTR_DIR(PORTR1,1);
PORTR_DIE(PORTR1,1);
引脚使用冲突
有时候我们在调程序,上板发现IO口并没有按我们设定的状态运行,这个时候如果排查完确定不是引脚原因的话, 就可以看看是不是软件上多出使用了同一个IO口造成的。主要有以下位置可以检查:
- Led灯引脚配置
- 按键引脚配置
- 串口打印引脚冲突
- AUX检测引脚冲突
- Mute引脚冲突
- LED数码管引脚冲突
- LCD引脚
找不到怎么办
假设你使用了PA0这个引脚,但是你按照上面的位置都检查了一遍,依然发现这个引脚还是不工作,那么有以下可能:
- 开发板芯片烧坏了,刚好PA0这个引脚烧坏了,换个口试试
- PA0代码配置有问题,看看上下拉和引脚上面有没有冲突,或者看看输入输出的配置有没有问题,最直接的就是换口测试,因为不可能所有的口都不行。
- 全局搜索PA0这个引脚,看看除了以上位置,还有没有在其他地方呗调用。
全局搜索技巧:
以上截图都是基于本人自己整理的SDK,使用公版SDK的情况下,道理是一样的,只是sdk_cfg.h里面没有截图中的那些我自己整理的宏定义。