- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我问是因为可以在这里找到类似问题的答案:Jump to Bootloader in STM32 through appliction i.e using Boot 0 and Boot 1 Pins in Boot mode from User flash
用户“JF002”@JF002 回答“当我想跳转到引导加载程序时,我在其中一个备份寄存器中写入一个字节,然后发出软复位。然后,当处理器重新启动时,在非常程序开始时,它会读取这个寄存器。这个寄存器包含指示它应该以引导加载程序模式重启的值。然后,跳转到引导加载程序就容易多了”
有人可以逐步向我解释该解决方案或展示代码示例吗?在这个时候,我正在写我的考试,我真的很依赖这方面的帮助,因为它只是编程的一小部分,而且我没有这方面的经验。
最佳答案
我认为用户@JF002 所指的“备份寄存器”是 STM32 板载 SRAM。以下对我有用:
在程序开始时使用以下方法配置备份寄存器:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);
PWR_BackupRegulatorCmd(ENABLE);
在您的程序中使用以下方法将A_VALUE
写入备份寄存器:
(*(__IO uint32_t *) (BKPSRAM_BASE + OFFSET)) = A_VALUE;
其中OFFSET
是写入SRAM 的地址。使用 0
作为第一个地址。
使用 NVIC_SystemReset()
发出软复位命令。
启动时,读取 (*(__IO uint32_t *) (BKPSRAM_BASE + OFFSET))
并检查 A_VALUE
:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_BKPSRAM, ENABLE);
PWR_BackupRegulatorCmd(ENABLE);
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFF0000; // For STM32F4 Discovery
if((*(__IO uint32_t *) (BKPSRAM_BASE + 0)) == A_VALUE)
{
(*(__IO uint32_t *) (BKPSRAM_BASE + 0)) = 0; // Reset memory, if desired.
SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4))); // Set Bootloader address
__set_MSP(*(uint32_t *)addr); // Move Stack Pointer
SysMemBootJump(); // Execute Bootloader
}
else
{
RunYourApplication();
}
关于c - STM32F4通过SoftReset跳转至Bootloader且无需BOOT0和BOOT1引脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402774/
我是一名优秀的程序员,十分优秀!