中级会员
 
- 积分
- 446
- 金钱
- 446
- 注册时间
- 2017-2-14
- 在线时间
- 90 小时
|
10金钱
各位坛友好,最近在做 关于 tftp和http 通过网口升级程序的程序。现在已经可以烧写和读取烧写进去的 文件,并且升级了。
但是好景不长,遇到了个问题,反复查看基本确定是 BOOTLOADER里面 用了SYSTICK,然后在APP里面重新定义向量表之后
systick就算是重新赋值,也无法进入APP程序中的Systick_Handler(),然后导致APP里面的Ucos无法启动,并且无法初始化成功ETH。
HAL_Delay(ETH_REG_WRITE_DELAY); HAL库里面有一个ETH的DMA操作,然后就死在这里了,反复查看确实是 Bootloader里面用了SYSTICK
跳转到APP之后SYSTICK就没用了,也不是没用SysTick->VAL在更新并且SysTick的超时位也置位了,就是无法触发Systick_Handler()中断。
小弟也想了几个尝试的办法,在bootloader里面接收到要升级的文件,在要升级前把Systick关闭了,并且把HAL_Deint();还把INTX_DISABLE();了
都没有效果,最后想了个办法,就是接收到升级文件之后,写入flash之后软件复位了HAL_NVIC_SystemReset();,r然后就可以运行了。
但是心想不是个办法,肯定要找到,但是没有头绪,不知各位有没有遇到给个讲解!
|
最佳答案
查看完整内容[请看2#楼]
你的NVIC没有复位,原来的库文件2.x的版本是有个NVIC_DeInit()函数的,后来的版本没了,bootloader跳转之前复位NVIC.
|