请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 568|回复: 3
收起左侧

CPU FLSAH 擦除时报错pgaerr pgperr的问题定位

[复制链接]

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2022-6-2 19:42:56 | 显示全部楼层 |阅读模式
第一次发帖今天在使用bsp_cpu_flash库函数擦除时,擦除失败,具体查找原因发现flash->SR中pgaerr pgperr标志位置1,遂查找原因。
最终定位于bsp_tim_pwm库中的bsp_SetTIMOutPWM函数,由于HAL_TIM_PWM_DeInit(&TimHandle)的TimHandle未初始化,导致flash->SR中pgaerr pgperr标志位置1。
具体原理不理解,供大家参考,查资料时也发现,未初始化的野指针会导致flash->SR中pgaerr pgperr标志位置1,大家注意一下。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2022-6-3 00:09:15 | 显示全部楼层
ST的结构体变量经常让人容易入坑。
定义的时候就得初始为0.
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2022-6-6 11:45:11 | 显示全部楼层
eric2013 发表于 2022-6-3 00:09
ST的结构体变量经常让人容易入坑。
定义的时候就得初始为0.

硬汉哥,初始为0的话,flash会报错的……
改成这样以后才不报错的,DeInit放后面了……
/*  PWM频率 = TIMxCLK / usPrescaler + 1)/usPeriod + 1)*/
        TimHandle.Instance = TIMx;
        TimHandle.Init.Prescaler         = usPrescaler;
        TimHandle.Init.Period            = usPeriod;
        TimHandle.Init.ClockDivision     = 0;
        TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
        TimHandle.Init.RepetitionCounter = 0;
        TimHandle.Init.AutoReloadPreload = 0;
       
        HAL_TIM_PWM_DeInit(&TimHandle);
       
        if (HAL_TIM_PWM_Init(&TimHandle) != HAL_OK)
        {
                bsp_Error_Handler(__FILE__, __LINE__);
        }
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2022-6-6 15:42:39 | 显示全部楼层
在做IAP升级的时候,发现H743的HAL库在擦除内部FLASH时有返回失败的情况,反复多擦几次就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 19:56 , Processed in 0.200670 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表