如果您的代码中不小心将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中
实现前提:CDK工程目录包含工程用到的全部文件(*.c, *.h. *.s, *.ld, *.a, .etc,.),即不可以有CDK安装目录下的文件。
1、在linux上安装编译所需的工具套件
● 下载linux下的工具到安装目录。 https://occ.t-head.cn/community/download?id=3885366095506644992
参考ReleaseNotes.pdf,根据linux系统类型下载合适的elfabiv2, 如:64位机选择 csky-elfabiv2-tools-x86_64-minilibc-20210423.tar
● 解压:art -zxf tar.gz
● 将安装目录下的bin目录加到环境变量PATH中,即完成工具套件的安装。
2、确保在工程在windows CDK IDE中编译一次。注意:CDK需要2.8.x版本及以上。
3、 删除或屏蔽与__rt_entry相关的所有内容。__rt_entry.o是一个CDK调试需要的一个文件,与工程的目标文件没有关系。
- 修改apt32fxxx.mk文件,一般和xxx.cdkproj在同一个目录下
- 修改apt32fxxx.txt文件,一般和xxx.cdkproj在同一个目录下
4、屏蔽脚本文件(apt32fxxx.mk)中checksum相关内容(如果有的话)。
5、将CDK工程完全copy到linux系统中。
6、在apt32fxxx.mk文件所在的目录运行: make -f apt32xxx.mk
之后就可以通过修改mk文件的一些参数,调整编译和连接的选项了。