工具/软件:
我们使用的是 C2000 MCU、特别是 F280025C、适用于电机控制。 CAN 引导加载程序位于闪存的前3个扇区中。 之后、我们放置了应用代码。
在下电上电期间、引导加载程序首先运行、等待一段时间、然后禁用 CAN 和计时器、最终跳转到应用程序。
此流程可以正常运行—我们在下电上电期间使用 CAN 更新了固件、并且应用程序可以正常运行。
接下来、我们希望避免下电上电、而是通过向应用发送 CAN 消息来执行软件复位。 引导加载程序就会运行、我们再次更新固件。
但是、这一次应用程序无法正常运行、具体而言、
PWM 输出无法正常工作。
再次执行下电上电(无需重新刷写固件)后、应用程序工作正常。
观察结果:
ADC 和 I/O 等其他外设工作正常。
在3个 PWM 输出中(U、V、W)、V 和 W 相位正确输出。
U 相似乎使用与 V PHASE 相同的比较器值。 我们通过更改计数器比较值确认了这一点。
我们通过 CAN 更新计数器比较值,并使用 getCounterCompare ()函数读回这些值,该函数返回正确的值。
我们还尝试了不同的值、但仍然、W 相没有问题、而 U 相输出似乎反映了 V 相。
我们注意到、跳转到应用程序时没有正确设置 PWMXLINK 寄存器。 在应用启动过程中、
有三行会清除某些 RAM 存储器区域、这就是问题所在:
HAL_clearDataRAM ((void *) extVarsLoadStart、(uint16_t) extVarsLoadSize);
我想要澄清的是这一点:为什么下电上电不会导致此问题、但软件复位会导致此问题?
这似乎与 extVarsLoadSize 特别相关。
链接器文件中包含以下内容:
LOAD = RAMGS0
LOAD_START (extVarsLoadStart)、
load_size (extVarsLoadSize)、
LOAD_END (extVarsLoadEnd)