1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 STM32L452 Nucleo-64 开发套件。我正在尝试使用引导加载程序更新固件。我的理解是您可以设置闪存选项位以便在复位时进入系统内存(引导加载程序模式),这似乎确实有效。我能够通过 STM32CubeProgrammer 接口成功刷新 MCU。但是当我尝试使用 Cube Programmer 的命令行版本时,有时下载命令没有执行并且我得到一个 NACK 响应,有时我确实看到进度条达到 100%,但 MCU 停留在引导加载程序模式。如果我使用板上的重置开关重置电路板,它只会恢复到之前的程序,而不是应该刷新的程序(它没有被正确充实)。当我使用 Cube Programmer UI 时,我可以看到固件已成功更新。不过,我需要为我们的产品使用 CLI 版本。我正在通过 UART1 闪存 MCU,这在 UI 版本中有效。我想知道这个问题是否与闪存选项位操作有关?还有其他想法吗?我附上了命令行的屏幕截图和来自 CubeProgrammer 的日志文件。请参阅下面的选项位代码。谢谢你。
void configureBoot(){ while((FLASH->SR & FLASH_SR_BSY_Msk) == FLASH_SR_BSY_Msk ); // 等待闪存操作忙(设置 BSY) FLASH->KEYR = 0x45670123; // 设置闪存密钥以允许写入 FLASH_CR FLASH->KEYR = 0xCDEF89AB; FLASH->OPTKEYR = 0x08192A3B;// 设置 Flash optkey 允许写入 FLASH_OPTR FLASH->OPTKEYR = 0x4C5D6E7F; FLASH->OPTR &= ~FLASH_OPTR_nSWBOOT0_Msk; //nBoot0_SW 位 0 FLASH->OPTR |= FLASH_OPTR_nBOOT1_Msk ; // nBoot1 位 1 FLASH->OPTR &= ~FLASH_OPTR_nBOOT0_Msk ;// nBoot0 位 0 FLASH->CR |= FLASH_CR_OPTSTRT_Msk; // 设置 OPSTRT while((FLASH->SR & FLASH_SR_BSY_Msk) == FLASH_SR_BSY_Msk ); // 等待闪存操作忙(设置 BSY) FLASH->CR |= FLASH_CR_OBL_LAUNCH_Msk; // 系统复位 } |
|
相关推荐
1个回答
|
|
使用命令“ob nBOOT0 = 1”解决了这个问题。重新配置闪存选项位允许用户选择在引导时运行的内存位置(主闪存、系统(引导加载程序)或 sRAM)。MCU 需要在编程选项字节后复位以加载它们。输入-ob 命令后,指定内存位置的程序将开始运行。另外,我这里不是在外部驱动 BOOT0 引脚。这一切都是通过软件完成的。
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2730 浏览 1 评论
3239 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1808 浏览 1 评论
3647 浏览 6 评论
6035 浏览 21 评论
1338浏览 4评论
198浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
350浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
442浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
273浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:26 , Processed in 1.192633 second(s), Total 77, Slave 61 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号