最近工作中在移植AT32代码的时候遇到一个现象:
现象描述:
使用官方开发板调试好代码后准备移植到项目用的同款芯片板子,第一次连接后keil能够识别到芯片,但是第二次准备烧录时,芯片怎么都识别不出来。以为是芯片问题,再次换过芯片后还是烧录一次后就识别不到芯片了。看过官网上的相关文档FAQ,仍然无法解决。
分析原因:
因为是代码烧录一次后芯片就不能烧录了,所以大概率是芯片代码可能有问题。下面是几个常见的排查方向
原因1:Jlink管脚重定义问题
这个是代码移植时的常见问题,因为开发板与项目用到的板子芯片型号上有一些区别,但是经过检查后也没问题,一般硬件做板子时也会注意这个问题,都会绕开jlink管脚。所以首先排除这个问题。
原因2:时钟配置问题
开始怀疑时内部时钟没有配置对,导致内部时钟没有开启或者时钟不对,烧录器检测不到芯片。我是用雅特力官方的时钟配置工具配置的时钟初始化代码,但是通过BC代码对比工具对比之前的代码,感觉并没有什么问题,但总觉得是时钟的问题。
原因3:外部时钟源速率选择问题
在暂时排除掉上面几个原因后,经过同事的指点发现这个板子用的是24MHZ的晶振,而常见的外部晶振是8Hhz的,如果代码中配置的是8Mhz 的外部输入晶振,很容易就会导致内部超频,芯片不启动。因此最后的问题就是外部晶振速率选择错误。
解决方法:
此时找到了原因,但是芯片因为时钟源选择错误还是不能识别到,因此需要更改boot引脚。更改boot引脚后,烧录符合外部时钟源的代码然后改回来,就能正常运行代码了
————————————————
版权声明:本文为CSDN博主「GivemeAK」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/GivemeAK/article/details/131936871
|