0

我最近开始学习使用 CMSIS Core 框架进行裸机嵌入式开发。我不明白为什么用户 LED 没有通过将 ODR[13] 设置为 1 来打开,而是通过将其保留为默认值(即 0)来打开。

这是我写的代码。

 #include "stm32f103xb.h"


int main(void){
    /** 
    * Enable clock for APB2 bus
    * RCC_AP2ENR --> BIT 4 --> 1
    **/
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

    /**
     * Set GPIOC PIN 13 OUTPUT
     * GPIOC_CRH --> BIT(23,22,21,20) = (0,0,0,1)
     * MODE13[1:0] = 0 1
     * CNF13[1:0] = 0 0
     */
    GPIOC->CRH = GPIO_CRH_MODE13_0 | (GPIOC->CRH & ~ GPIO_CRH_CNF13);
    
    while(1){
        GPIOC->ODR |= GPIO_ODR_ODR13; // commenting this line turns on the LED
    }
}
4

1 回答 1

1

免责声明:本人有软件背景,业余爱好者使用STM32F103C8T6蓝丸。

话虽这么说,根据stm32-base.org,似乎 PC13 上的用户 LED 以sink 模式连接。这可以解释为什么将 ODR[13] 设置为 0 会为 LED 供电:这确实允许电流流过负载 - 请参见 stm32-base.org 页面上的示意图:

在此处输入图像描述

于 2020-12-30T09:32:07.593 回答