我试图在STM32L476RG Nucleo板上实现经典的眨眼示例。

根据STM32L4x数据表:LD2连接到GPIOA端口5(PA5)。
PA5使用AHB2总线。

注意:我使用了Keil uVision 5;我用STM32L476RGTx目标创建了一个新的uVision项目。
在“管理运行时环境”对话框中,我选择了:


CMSIS >>核心(标志)
设备>>启动(标志)


这里的代码:

#include "stm32l4xx.h"                  // Device header
//#include <stdint.h>

//#define MASK(x) ((uint32_t) (1<<(x))) // bitmasking

void delayMs(int delay);

int main(void){
    // RCC->AHB2RSTR |=1;
    // RCC->AHB2RSTR &=~1;
    // RCC->AHB2ENR |= MASK(0); //bitwise OR. Enable GPIOA clock
     RCC->AHB2ENR |= 1;
     //GPIOA->MODER |= MASK(10);
    GPIOA->MODER |= 0x400;

    while(1){


        //GPIOA->ODR |= MASK(4);
         GPIOA->ODR |= 0x20;
        delayMs(500);
        //GPIOA->ODR &= ~MASK(4);
        GPIOA->ODR &= ~0x20;
        delayMs(500);
    }
}

void delayMs(int delay){
int i;
    for(;delay>0; delay --){
        for (i=0; i<3195;i++);
    }
}


Build输出返回:

Build started: Project: blinknew
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
compiling main.c...
linking...
Program Size: Code=520 RO-data=408 RW-data=0 ZI-data=1632
".\Objects\blinknew.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:09


当我下载它时,Keil uV 5返回:

 Load "C:\\Users\\gmezz\\OneDrive\\Documenti\\Bare_Metal\\Blinknew\\Objects\\blinknew.axf"
Erase Done.
Programming Done.
Verify OK.
Flash Load finished at 22:37:52


LED应该闪烁1秒,但实际上什么也没发生。

老实说,我不明白出了什么问题。

有人可以帮我吗?

通用汽车

最佳答案

我可能是错的,但是根据参考手册(RM0351)的第6.2.19节,启用外设时钟后,应等待2个时钟周期,然后再访问其寄存器。尝试在RCC-> AHB2ENR | = 1之后引入一个短暂的延迟;线。在您的情况下,我认为MODER寄存器未获得正确的值。

我还建议使用调试器检查寄存器的实际值。

10-06 06:03