问题说明

最近在使用nrf52832开发,有用到p9,p10作为GPIO输出,当我实际配置后,测试后并没有效果,搞得我也是一脸懵逼,然后打开原理图一看,发现p9,p10和NFC1,NFC2共用。
然后我印象中记得,在一个开发群中,看到类似的问题,但是太久了找不到,百度一搜,果然有一样的问题,添加对应的宏后,果然就能配置了
原理图引脚

问题解决

原因

nrf52832的p09,p10引脚被默认配置为nfc天线引脚,每次复位后,都会自动变成nfc天线引脚的功能
下面的代码在工程的system_nrf52.c中,默认是没有CONFIG_NFCT_PINS_AS_GPIOS这个宏的,所以是不能配置为GPIO的

/* 如果代码中不使用 NFCT,则将 NFCT 引脚配置为 GPIO。如果未定义 CONFIG_NFCT_PINS_AS_GPIOS,两个 GPIO(请参阅《产品规格》了解哪些 GPIO)将被保留给 NFC,不能作为普通 GPIO 使用。*/
    #if defined (CONFIG_NFCT_PINS_AS_GPIOS)
        if ((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)){
            NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
            while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
            NRF_UICR->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk;
            while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
            NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
            while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
            NVIC_SystemReset();
        }
    #endif

解决

方法1

最好是直接在MDK添加宏配置
MDK处添加宏

方法2

在system_nrf52.c的开始位置,添加CONFIG_NFCT_PINS_AS_GPIOS。
#define CONFIG_NFCT_PINS_AS_GPIOS