完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目要求使用STM32L431内部FLASH存储一些调电保存参数,调试发现第一次将参数写入内部FLASH没有问题,当时当我再次写入时,报错,写入不成功,我调试发现在我写入之前FLASH->SR寄存器中的PGSERR位置1了,导致我擦除失败,我进一步调试发现,在我再次写之前这个标志位就已经置1了。 于是我单步调试发现这个标志置位发生在我调用“__HAL_tiM_DISABLE()”函数时(此函数位于HAL_TIM_Base_DeInit()中)自动置位的,我看手册也没找到产生这个问题的原因,是芯片BUG还是程序BUG?
/** 测试代码 :希望有条件的跑跑看 */ int main(void) { /** 使能电源接口时钟 */ __HAL_RCC_PWR_CLK_ENABLE(); /** Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /** 时钟初始化 */ SystemClock_Config(); /** 下面这个函数会导致PGSERR置位 */ HAL_TIM_Base_DeInit( TimHandle); HAL_Delay(1000); DEBUG("Run!!!n"); for(;;) { } |
|
相关推荐
1个回答
|
|
首先,我们需要了解一下STM32L431的FLASH操作特性。
在STM32L431中,对FLASH进行擦除操作时,需要先将FLASH解锁,然后进行擦除操作,最后再锁定FLASH。如果在这个过程中发生了错误,那么可能会导致FLASH的某些标志位被置位,从而影响擦除操作的正常进行。 在你的情况下,当调用`__HAL_TIM_DISABLE()`函数时,发现FLASH->SR寄存器中的PGSERR位置1,导致擦除失败,可能是因为在调用该函数之前,你没有正确解锁FLASH,或者解锁FLASH之后没有将其锁定回去。 你可以尝试按照以下步骤进行操作: 1. 在进行FLASH操作之前,首先执行以下代码解锁FLASH: ``` HAL_FLASH_Unlock(); ``` 2. 在进行FLASH操作之后,执行以下代码锁定FLASH: ``` HAL_FLASH_Lock(); ``` 这样做的目的是为了确保在进行FLASH操作时,FLASH处于正确的状态。如果在操作FLASH之前没有解锁,或者操作FLASH之后没有锁定,可能会导致FLASH的某些标志位被错误地置位,影响后续的操作。 如果以上步骤没有解决问题,可能还需要进一步分析代码逻辑,查看是否存在其他地方可能导致FLASH操作异常的问题。另外,还需要确保使用的库函数和芯片手册中的FLASH操作相关函数的参数正确设置。 如果问题仍然存在,你可以尝试联系STM32L431的技术支持团队,寻求进一步的帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:12 , Processed in 0.803458 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号