代码之家  ›  专栏  ›  技术社区  ›  Questdoino

STM32 F103C8T6并非所有引脚都工作

  •  1
  • Questdoino  · 技术社区  · 7 年前

    我使用的是arduino nano风格的开发板,里面有STM32F103C8T6。我注意到一些带有单端口的引脚工作正常,但其他引脚根本不工作。我使用的是CMSIS v.5.0.1库和Keil v.5.23 IDE。

    int main (void){
        RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
        GPIOB->CRL &= ~(GPIO_CRL_MODE3 | GPIO_CRL_MODE4 | GPIO_CRL_MODE5 | GPIO_CRL_CNF3 | GPIO_CRL_CNF4 | GPIO_CRL_CNF5);
        GPIOB->CRL |= (GPIO_CRL_MODE3 | GPIO_CRL_MODE4 | GPIO_CRL_MODE5);
        GPIOB->BSRR = (0x38 << 16);
        while (1){
        }
    }
    

    我有三个LED通过阴极通过电阻器连接到PB3、PB4和PB5,只有连接到PB5的LED才会发光。反向连接(阳极到引脚)并将其驱动到高位

    GPIOB->BSRR = 0x38;
    

    不改变任何内容,改变输出速度并将其配置为开漏输出不会产生任何结果。我试图通过st-link调试模式直接切换引脚-同样的结果,PB5工作正常,PB3-PB4不工作。我甚至试着开着整个港口

    int main (void){
        RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
        GPIOB->CRL = 0x55555555;
        GPIOB->BSRR = 0xFFFF << 16;
        while (1){
        }
    }
    

    PB3-PB4保持沉默。当然,LED可以正常工作。尝试了不同的板-效果相同。

    1 回复  |  直到 7 年前
        1
  •  3
  •   user149341 user149341    7 年前

    默认情况下,PB3和PB4用于JTAG调试,分别为JTDO和JNTRST。如果要将这些管脚用于GPIO,则需要使用 SWJ_CFG 字段输入 AFIO_MAPR