
通过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))); |
还有个奇怪的想象是,如果在keil5里用Jlink调试全速运行的话,大部分时候都会测试通过,但是一脱机自己运行的话,就会报错。 |
还有个奇怪的现象是,如果在keil里用jlink调试状态下全速运行,大部分时候都没问题,但是一脱机自己跑的话,就会出现错误。 |
EOP的意思是操作完成的意思啊,手册上是这样描述的 The end of the program operation is indicated by the EOP bit in the FLASH_SR register. |