1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
我是 STM32 环境的新手,我正在尝试更改 STM32L452 的 BOR 级别。我想我在尝试这样做时损坏了闪光灯。现在,当我尝试对设备重新编程时,它失败了并出现以下错误: 打开片上调试器 0.10.0+dev-00021-g524e8c8 (2019-04-12-08:48) 根据 GNU GPL v2 获得许可 有关错误报告,请阅读 http://openocd.org/doc/doxygen/bugs.html srst_only 单独 srst_nogate srst_open_drain connect_assert_srst 信息:选定的传输接管了低级目标控制。结果可能与普通 JTAG/SWD 不同 填充区域擦除设置为 1 适配器速度:8000 kHz adapter_nsrst_delay:100 信息:时钟速度 8000 kHz 信息:STLINK v2 JTAG v36 API v2 SWIM v7 VID 0x0483 PID 0x3748 信息:使用 stlink api v2 信息:目标电压:3.201051 信息:无法匹配请求的速度 8000 kHz,使用 4000 kHz 信息:Stlink 适配器速度设置为 4000 kHz 信息:STM32L452RETx.cpu:硬件有 6 个断点,4 个观察点 信息:在端口 3333 上监听 gdb 连接 目标因调试请求而停止,当前模式:线程 xPSR:0x01000000 个人计算机:0x08003340 msp:0x20028000 信息:无法匹配请求的速度 8000 kHz,使用 4000 kHz 信息:Stlink 适配器速度设置为 4000 kHz 信息:无法匹配请求的速度 8000 kHz,使用 4000 kHz 适配器速度:4000 kHz
信息:设备 ID = 0x20016462 信息:STM32L4xx 闪存大小为 512kb,基地址为 0x8000000 信息:写入前擦除填充区域 错误:整个银行的访问必须从银行的开头开始。 错误:损坏的 fifo 读指针 0xffffffff 错误:等待目标停止时超时 目标因调试请求而停止,当前模式:Handler HardFault xPSR:0x61000003 个人计算机:0x08003406 msp:0x20027fa8 错误:错误等待目标闪存写入算法 错误:块写入失败 错误:在偏移量 0x00000000 的地址 0x08000000 写入闪存时出错 嵌入式:startup.tcl:476:错误:**编程失败** 在程序“程序”中 在文件“embedded:startup.tcl”调用的过程“program_error”中,第 535 行 在文件“embedded:startup.tcl”中,第 476 行 以下是导致问题的我的代码: 从 Main.c 调用 如果(BOR_Set(BOR_Level_4)== BOR_Result_Ok) { HAL_GPIO_WritePin( LED1_PORT, LED1_G_PIN, GPIO_PIN_SET ); // 关 HAL_GPIO_WritePin( LED1_PORT, LED1_B_PIN, GPIO_PIN_RESET ); // 打开 HAL_Delay( pdMS_TO_tiCKS( 500 ) ); HAL_GPIO_WritePin( LED1_PORT, LED1_B_PIN, GPIO_PIN_SET ); // 关 HAL_GPIO_WritePin( LED1_PORT, LED1_G_PIN, GPIO_PIN_RESET ); // 打开 } //- ------------------------------------------
* @brief 可用的掉电级别 */ typedef 枚举 { BOR_Level_0 = OB_BOR_LEVEL_0, /*!< 禁用掉电检测 */ BOR_Level_1 = OB_BOR_LEVEL_1, /*!< 设置掉电检测级别 1 */ BOR_Level_2 = OB_BOR_LEVEL_2, /*!< 设置掉电检测级别 2 */ BOR_Level_3 = OB_BOR_LEVEL_3, /*!< 设置掉电检测级别 3 */ BOR_Level_4 = OB_BOR_LEVEL_4 } BOR_Level_t; BOR_Result_t BOR_Set(BOR_Level_t BORValue) { HAL_StatusTypeDef 状态; FLASH_OBProgramInitTypeDef FLASH_Handle; /* 检查当前 BOR 值 */ if ((BOR_Get() & 0x0F00) != BORValue) // BOR 值的第 8 位到第 10 位。 { /* 设置新值 */ /* 选择所需的 V(BOR) 电平 */ FLASH_Handle.OptionType = OPTIONBYTE_USER; FLASH_Handle.USERConfig = (uint32_t)BORValue; //FLASH_Handle.USERType = OB_USER_BOR_LEV; HAL_FLASH_Unlock(); /* 解锁选项字节块访问 */ HAL_FLASH_OB_Unlock(); /* 设定值 */ HAL_FLASHEx_OBProgram(&FLASH_Handle); /* 启动选项字节加载 */ status = HAL_FLASH_OB_Launch(); /* 锁定对寄存器的访问 */ HAL_FLASH_OB_Lock(); HAL_FLASH_Lock(); /* 检查成功 */ 如果(状态!= HAL_OK) { /* 返回错误 */ 返回 BOR_Result_Error; } } /* 返回确定 */ 返回 BOR_Result_Ok; } 当我调试代码和调用 HAL_FLASH_OB_Launch 函数时,问题就开始了。 我相信破坏闪存的是这个声明 “FLASH_Handle.USERConfig = (uint32_t)BORValue;” 相反,我应该使用 ""FLASH_Handle.USERConfig = FLASH_Handle.USERConfig | (uint32_t)BOR 值; 如果有人可以指出我在代码中出错的地方以及我如何重新编程芯片,因为目前它没有响应并且它不工作,请。我有 ST-LINK/V2 用于对设备进行编程和调试,我正在使用 Ac6 STM32 系统工作台工具链和 Eclipse IDE。我尝试擦除闪存并重新编程,但仍然出现相同的程序错误。请帮忙。 |
|
相关推荐
1个回答
|
|
我使用 ST 链接实用程序解决了对芯片重新编程的问题。在 ST 链接软件的帮助下,我能够连接、读取损坏的选项字节并相应地设置它们。之后使用相同的软件擦除整个芯片并借助 bin 文件对代码进行编程。
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2730 浏览 1 评论
3239 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1808 浏览 1 评论
3647 浏览 6 评论
6035 浏览 21 评论
1339浏览 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 09:16 , Processed in 1.275107 second(s), Total 78, Slave 62 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号