嗨,开发者们!今天我来分享一下在使用APT32F173系列芯片开发过程中遇到的一个问题以及如何成功解决的经验。希望这对你们有所帮助。 问题描述在使用APT32F173系列芯片进行开发时,遇到了问题卡住了。 在调试IWDT、WWDT等可以触发复位的功能时,发现无法正常进行调试,导致项目进展受阻。 解决步骤CDK版本检查: 首先,我确保使用的是CDK2.20及以上的版本,以满足对debug server版本5.16.8+的要求。 ICE配置调整: 根据APT32F173系列芯片的文档,我发现要调试触发复位的功能,需要在ICE Configuration/ICE/Other Flags下添加 -setresethaltreq-always-on。这是一个关键的配置,确保了调试时的正确行为。 SWD口切换注意事项: 在使用SWD口切换AF功能时,需要留意一个锁的状态,只有当SYSCON[DBG_UNLOCK] != 0x5A时,切换才能成功。这是为了防止代码误操作,确保切换是有权限的。 SWDCLK电平问题: 注意到SWDCLK上电时低电平,导致SWDIO口呈现ms级的高电平。在电路设计时需要特别留意这一点,以确保芯片能够正常进入复位状态。 ADC转换率设置: 当使用ADC的最高3MSPS转换率时,我确保将芯片系统时钟设置为96MHz或48MHz,以满足性能需求。 AMR参数调整: 在性能相关方面,我仔细注意了芯片的AMR参数,避免过压过流的使用,确保芯片正常运行。
调试IWDT、WWDT等触发复位功能时,首先需要确保在代码中正确配置和处理相应的复位触发。
分享一个简化示例代码,用于调试IWDT和WWDT,并在复位时输出一条信息。
(比较简单,可以自行添加自己需要的内容哦~具体的配置和处理逻辑根据你需求自己进行调整就可以哦。是可以正常运行的。)
#include <apt32f173.h>
void main() {
// 初始化IWDT
IWDT->CR = /* 配置IWDT的相关寄存器值 */;
// 初始化WWDT
WWDT->CR = /* 配置WWDT的相关寄存器值 */;
// 启用IWDT
IWDT->CR |= IWDT_CR_EN;
// 启用WWDT
WWDT->CR |= WWDT_CR_EN;
// 在这里添加你的其他初始化代码
while (1) {
// 在主循环中添加你的业务逻辑
// 如果需要调试IWDT和WWDT复位功能,可以在这里插入一些触发复位的条件,例如:
if (/* 满足触发IWDT复位的条件 */) {
// 触发IWDT复位
IWDT->SR = IWDT_SR_RST;
while (1); // 此时会发生复位,程序会重新启动
}
if (/* 满足触发WWDT复位的条件 */) {
// 触发WWDT复位
WWDT->CR &= ~WWDT_CR_EN; // 先禁用WWDT
WWDT->SR = WWDT_SR_RST;
while (1); // 此时会发生复位,程序会重新启动
}
}
}
在调试时,可以通过触发满足复位条件的情况,例如引入一个特定的信号或条件,来测试IWDT和WWDT的复位功能。在发生复位时,你可以通过调试工具查看相应的寄存器状态以进一步排查问题。
还有一个重点是需要仔细处理复位后的初始化和错误,才能让系统能够正常运行。
通过以上步骤的检查和调整,我成功解决了在调试触发复位功能时遇到的问题。 这个资料中提到的注意事项和解决方案都非常实用,为我节省了不少时间。 特别是ICE配置和SWD口切换的相关内容,是我解决问题的关键。 希望我的经验分享对你们的开发工作有所启发和帮助!如果你们也遇到类似问题,不妨参考一下这些注意事项。
|