你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FLASH_FLAG_EOP标志位在多次操作后置位超时

[复制链接]
fancy0411 提问时间:2020-6-12 11:24 /
        通过SWD协议给STM32E103芯片烧写程序的时候发现,在烧写过程中,数据能发送出去(reveive_success_mark==1),读SR->FLASHBUSY也能置位,但是SR->FLASHEOP一直置位超时,跪求各位大神帮忙看一下是什么问题,感谢!!!
下面是出问题部分的代码:
                reveive_success_mark=0;
                        nRF51_return_Timeout=0;
                        TIM3_ENABLE();   //开定时器3,共25ms超时                       
                        do
                        {
                                reveive_success_mark=swd_write_block(addr,Send_buffer,TransMaxLen);                                
                                if(nRF51_return_Timeout>NUMdelay)
                                {
                                        TIM3_DISABLE();
                                        return ERROR_TIME_HALT;
                                }
                        }while(!(reveive_success_mark==1));                       
                        TIM3_DISABLE();
                        Delay_n_ms(500);
                        /*判断是否忙*/
                        reveive_success_mark=0;
                        nRF51_return_Timeout=0;
                        TIM3_ENABLE();   //开定时器3,共25ms超时         
                        do
                        {
                                reveive_success_mark=swd_read_word(FLASH_SR,&val);               
                                if(nRF51_return_Timeout>NUMdelay)
                                {
                                        TIM3_DISABLE();
                                        return ERROR_TIME_HALT;
                                }
                        }
                        while(!((reveive_success_mark==1)&&((val&FLASHBUSY)==FLASHREADY)));
                        TIM3_DISABLE();
                        Delay_n_ms(500);
                        /*判断是否成功操作*/
                        reveive_success_mark=0;
                        nRF51_return_Timeout=0;
                        TIM3_ENABLE();   //开定时器25ms         
                        do
                        {
                                reveive_success_mark=swd_read_word(FLASH_SR,&val);               
                                if(nRF51_return_Timeout>NUMdelay)
                                {
                                        TIM3_DISABLE();
                           return ERROR_TIME_HALT;
                         (每次都会因超时进入此地方,加长超时无效)
                        }
                        }
                        while(!((reveive_success_mark==1)&&((val&FLASHEOP)==FLASHEOP)));                        

评分

参与人数 1 ST金币 +5 收起 理由
STMCU + 5

查看全部评分

收藏 评论3 发布时间:2020-6-12 11:24

举报

3个回答
fancy0411 回答时间:2020-6-12 13:58:40
还有个奇怪的想象是,如果在keil5里用Jlink调试全速运行的话,大部分时候都会测试通过,但是一脱机自己运行的话,就会报错。
fancy0411 回答时间:2020-6-12 13:59:57
还有个奇怪的现象是,如果在keil里用jlink调试状态下全速运行,大部分时候都没问题,但是一脱机自己跑的话,就会出现错误。
butterflyspring 回答时间:2020-6-28 17:42:28
EOP的意思是操作完成的意思啊,手册上是这样描述的 The end of the program operation is indicated by the EOP bit in the FLASH_SR register.

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版