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