裸机C编程中闪烁的Led:STM32L476RG核子板

裸机C编程中闪烁的Led:STM32L476RG核子板,c,arm,microcontroller,stm32,cortex-m,C,Arm,Microcontroller,Stm32,Cortex M,我尝试在STM32L476RG核子板上实现一个经典的闪烁示例 根据STM32L4x数据表:LD2连接到GPIOA端口5(PA5)。 PA5使用AHB2总线 注意:我使用了Keil uVision 5;我用STM32L476RGTx目标创建了一个新的uVision项目。 在“管理运行时环境”对话框中,我选择了: CMSIS>>核心(标志) 设备>>启动(标志) 代码如下: #include "stm32l4xx.h" // Device header //#inc

我尝试在STM32L476RG核子板上实现一个经典的闪烁示例

根据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++);
        }
    }
    
    当我下载它时,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秒,但实际上什么也没发生

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

    有人能帮我吗


    GM

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


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

    这个程序发生了什么?你有什么问题?你有生成错误吗?运行时出现意外结果?跑步时撞车?请阅读或刷新,以及。问题已被编辑。GMI恐怕您必须阅读目标公司的文档,并学习如何设置和重置端口引脚。顺便说一句,您的Keil IDE应该有一些例子,至少几年前我尝试µVision时是这样。IIRC它被称为“blinky”,它可以做你正在尝试的事情。我解决了读取寄存器的问题。GPIOA_MODER的重置值为0xABFFFF,因此我不能像代码中那样使用位运算符。我需要放0xABFFF7FF,来设置PA5的方向。啊,我错过了那个。在重置MODER寄存器的值时,L系列似乎不同于F系列。
     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