Nucleo STM32F103RB 无法让驱动程序工作以启用 LED

问题描述 投票:0回答:1

所以我正在进入 STM32,我决定如果我从开发自己的驱动程序来启用所有寄存器等开始,那就太好了。当我尝试测试我的 GPIO 寄存器时,它似乎不起作用。我尝试调试了一段时间,修复了我能找到的所有问题,但它不起作用。我确保启用了外设时钟并更改了 GPIOx_CRL 寄存器,以确保每个寄存器配置正确,但是当我将 LED 插入标记为 D2 的引脚并运行我的代码时,当我看到寄存器配置正确。

这是我的main.c

#include "stm32f103rb.h"

void delay (void)
{
    for (uint32_t i = 0 ; i<500;i++);
}

int main(void)
{
    GPIO_Handle_t GpioLed;

    GpioLed.pGPIOx = GPIOD;
    GpioLed.GPIO_PinConfig.GPIO_PinNumber = GPIO_PIN_NO_2;
    GpioLed.GPIO_PinConfig.GPIO_PinMode = GPIO_MODE_OUT10;
    GpioLed.GPIO_PinConfig.GPIO_PinOutMode = GPIO_OP_TYPE_PP;
    GpioLed.GPIO_PinConfig.GPIO_PinPuPdControl = PULLDOWN;

    GPIO_PeriClockControl(GPIOD,ENABLE);

    /*pAPB2ENR |= (1<<5); */


    GPIO_Init(&GpioLed);

    while(1)
    {
        GPIO_ToggleOutputPin(GPIOD,GPIO_PIN_NO_2);
        delay();
    }

    return 0;

一切似乎都正常,直到我的 GPIO_ToggleOutputPin,当我运行该代码块时:

void GPIO_ToggleOutputPin(GPIO_RegDef_t *pGPIOx, uint8_t PinNumber)
{
    pGPIOx->ODR ^= (1 << PinNumber);
}

我可以看到 ODR 寄存器将寄存器中的 ODR2 值更改为 1,但我的 LED 灯没有打开。我不确定我做错了什么。

我尝试通过确保所有寄存器都正确配置来进行调试,但我的 LED 没有打开。

stm32
1个回答
0
投票
Nucleo F103RB 板上的

D2

引脚是基于 Arduino 命名符号的 Arduino 引脚,它实际上是 PA10(端口 A,引脚 10),而不是您配置代码正在执行的端口 D、引脚 2。如果您将 LED 连接到 
D2
,则需要配置端口 A、引脚 10,或者使用现有代码,但将 LED 连接到电路板左上角的 PD2。

参见

STM32 Nucleo-64 板用户手册中的图 14.NUCLEO-F103RB。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.