如果您的代码中不小心将SWD口对应的管脚功能设置为非SWD口,您需要:
● 用烧写器(不是CDK中的flash操作)将芯片代码擦除
● 换芯片
为了避免在调试期间出现这样的误操作,我们建议您在代码启动时,加入2~3s的delay,以保证在重新上电后,CDK有足够的时间获得芯片的控制。
某些芯片(如APT32F102x系列),支持多组SWD。芯片出厂时会选择其中之一作为默认SWD口。如果实际应用时,这组默认的SWD口需要用作其他功能,此时就需要更改芯片POR时的SWD口。
更改的方式有两种。
1、改写IO控制寄存器(CONLR/CONHR),将目标管脚的功能设为SWDIO和SWDCLK。设置完成后,SWD即刻转移到目标管脚上。
2、改写USER OPTION的内容,这种更改将会改变芯片上电时默认的SWD口。
下图为APT32F102x系列的USER OPTION配置值和SWD重映射端口的关系图:
USER OPTION的设置方式有三种:
APT当前芯片(APT32F101,APT32F172)的SWD口在POR时都会出现200us~150ms的高电平。
(APT32F102x系列、APT32S003是PA0.5和PA0.12)
这个高电平不是管脚的输出,而是为了兼容测试模式,POR后持续了一段时间的上拉状态。
如果这个状态影响到了实际应用,可以参考的解决方案是加下拉电阻。
注:内部上拉电阻在40Kohm左右,可以根据应用加适当的下拉电阻(如1Kohm)。
默认的驱动代码中,
1. 所有中断具有相同的优先级(最高优先级0)
2. 中断嵌套功能是使能的
所以当一个系统开启多个中断之后,这些中断之间可能会互相嵌套。这样一来,一些对时序敏感的中断执行就会出现和预料结果不一样的情况。比如一些通信模块和touch同时开启中断,一旦通信模块中断处理时被touch的中断嵌套,就可能导致通信失败。
在这样的应用场景下,需要调高关键模块的中断优先级,或者调低次要模块的中断优先级。可以通过修改NVIC中的IPR寄存器实现。具体代码根据驱动版本不同,
● 可能在apt32fxxx_ck801.c中
● 也可能在core_801.h中