Arm stm32从头构建成功闪烁,但未在板上运行

Arm stm32从头构建成功闪烁,但未在板上运行,arm,embedded,stm32,microcontroller,openocd,Arm,Embedded,Stm32,Microcontroller,Openocd,我对用mcu从头开始构建项目是新手。我获取了一个在eclipse/gdb构建环境中成功运行的旧项目文件,其中IDE为我完成所有构建,并尝试使用open ocd和工具链实现我自己的构建:arm none eabi。我成功地刷新了设备,但是主板没有运行代码。我希望我可能会遗漏一些明显的重要文件,但我还没有得出这个结论 我主要担心的是,我没有为我的start_up.c文件或linker.ld文件进行适当的设置,尽管我没有找到理由相信这一点。我正在使用stm32L476探索板。如果有人感兴趣,这里有数据

我对用mcu从头开始构建项目是新手。我获取了一个在eclipse/gdb构建环境中成功运行的旧项目文件,其中IDE为我完成所有构建,并尝试使用open ocd和工具链实现我自己的构建:arm none eabi。我成功地刷新了设备,但是主板没有运行代码。我希望我可能会遗漏一些明显的重要文件,但我还没有得出这个结论

我主要担心的是,我没有为我的start_up.c文件或linker.ld文件进行适当的设置,尽管我没有找到理由相信这一点。我正在使用stm32L476探索板。如果有人感兴趣,这里有数据表的链接:


我的问题来源于github:

我强烈建议不要使用C来引导C,也强烈建议不要跨编译域使用结构

•地址0x2000 0000处映射的96 KB字节(SRAM1) •32 KB字节,位于地址0x1000 0000处,具有硬件奇偶校验(SRAM2)

在STM32L49x/L4Ax设备上,SRAM2的别名为地址0x2004 0000,提供 SRAM1的连续地址空间

这是STM32L47是吗?所以这并不适用

08000000 <vector>:
 8000000:   20020000    andcs   r0, r2, r0
 8000004:   0800043b    stmdaeq r0, {r0, r1, r3, r4, r5, r10}
 8000008:   08000435    stmdaeq r0, {r0, r2, r4, r5, r10}
 800000c:   08000435    stmdaeq r0, {r0, r2, r4, r5, r10}
08000000:
8000000:20020000和CS r0、r2、r0
8000004:0800043b stmdaeq r0,{r0,r1,r3,r4,r5,r10}
8000008:08000435 stmdaeq r0,{r0,r2,r4,r5,r10}
800000c:08000435 stmdaeq r0,{r0,r2,r4,r5,r10}
0x200000=128KB。尝试一些小的开始0x2000000。或者选择96K。0x20018000

它不是坏的(当然,它可能取决于寄存器和字段),而是更干净地执行与寄存器分开的读-修改-写操作,因此寄存器只从一种模式切换到另一种模式,而不是两次切换模式

GPIOB->MODER &= ~(3UL<<4);    // Clear mode bits​
GPIOB->MODER |= 1UL<<4;       // Set mode to output​


tmp = GPIOB->MODER
tmp &= ~(3UL<<4);    // Clear mode bits​
tmp |= 1UL<<4;       // Set mode to output​
GPIOB->MODER = tmp

GPIOB->MODER&=~(3ul没有人想用你的github来回答这个问题。请在这里发布相关代码。
    if(Upush%2!=0){
        GPIOE->ODR &= ~(1UL << 8);
        for(int i=125000; i!=0; i--){}
        GPIOE->ODR |= (1UL << 8);
        for (int i=125000; i!=0; i--){}
    }
    if(Upush%2!=0){
        GPIOE->ODR &= ~(1UL << 8);
        GPIOE->ODR |= (1UL << 8);
    }
    while(1){
        GPIOE->BSRR = 1<<(8+16);
        for(volatile int i=125000; i!=0; i--){}
        GPIOE->BSRR = 1<<(8+ 0);
        for (volatile int i=125000; i!=0; i--){}
    }