This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我正在 尝试 使用对 TM4C1294KCPDT 进行编程 TMDSEMU200-U 调试器进行编程。
当我调试代码时、它成功下载映像、然后在运行代码后、它进入 FaultISR。
单步执行代码我发现、当代码尝试使用"SysCtlClockFreqSet ()"函数设置时钟频率时、它进入 faultISR。
我已附上代码和原理图。
这就是晶体的连接方式
下面是我的代码:
#include <stdint.h> #include <stdbool.h> #include "Config.h" // #include "driverlib/sysctl.h" #include "driverlib/interrupt.h" #include "inc/hw_gpio.h" #include "driverlib/rom.h" #include "driverlib/rom_map.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "inc/hw_memmap.h" #include "inc/hw_ints.h" uint32_t clockFreq = 0; uint32_t counter = 0; int main(void) { uint8_t state = 0; clockFreq = SysCtlClockFreqSet ( (SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_240), 120000000 ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_2); while(1) { counter++; if (state) { state = 0; GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_2, GPIO_PIN_2); // Logic LOW is shut down asserted } else { state = 1; GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_2, 0); // Logic LOW is shut down asserted } SysCtlDelay(clockFreq / (10000 * 3)); } }
您好!
我真的认为您的原理图和代码没有问题。 如果您在 LaunchPad 上运行同样的代码、我认为您不会遇到问题、对吧? 这意味着该问题很可能是由您的硬件造成的。
我在这篇文章中看到了类似的问题。 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1178485/tm4c1294ncpdt-tm4c1294ncpdt/4438261#4438261。 问题是晶振焊接不正确。 检查晶振并查看晶振是否为连接至 OSC0和 OSC1的引脚(引脚1和3)正确焊接。 如果您认为您有正确的晶体焊接、请检查是否可以在不同的电路板上重复同样的问题。 我建议您进行 ABA 交换测试。 将另一个已知正常的 MCU 更换到您的板上。 您可以重复同样的问题吗? 如果已知良好的 MCU 在电路板上无法正常工作、则表示存在板级问题。
只是一个平视。 我将从5/8-5/10休假。 我的回答将会延迟。
尊敬的 Charles:
感谢你的帮助。
可以、如果我在开发套件上运行该代码、则可以正常运行。
我浏览了您提供的链接、我仔细检查了晶振焊接、引脚方向正确
与开发套件相比、它是完全相同的。
我已将晶振通孔器件更改为16 MHz。
现在,当我运行代码时,行为基本上是相同的,它会停留在 faultISR()。
但是我发现、当我单步执行代码时、如果进入 SysCtlClockFreqSet()
函数、然后单步执行该函数、它便可以顺利通过
它会返回正确的频率。 之后、我已验证 LED 准确地闪烁。
在代码运行正常之后、我使其在调试模式下运行了一段时间。
但是、它在复位后无法正常运行、或者我只是编程并持续运行。
我已将晶振通孔器件更改为16 MHz。
在调用 SysCtlClockFreqSet ()时, SYSCTL_XTAL_25MHz 选项是否更改为 SYSCTL_XTAL_16MHz 以匹配外部晶体频率的变化?
是的,我做了如下所述
clockFreq = SysCtlClockFreqSet ( (SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_240), 120000000 )
您好!
您有多少个定制电路板? 您可以在所有板上还是仅在一个板上重复同样的问题吗?
您可以在 LaunchPad 上运行代码吗? 您可以在 LauchPad 上重复同样的问题吗?
现在当我运行代码时,行为基本相同,它会卡在 faultISR()。
复位时、PLL 被禁用、并且来自 PIOSC (精密内部振荡器)的系统时钟频率将为16 MHz。 当 调用 SysCtlClockFreqSet ()以将系统时钟频率设置为120 MHz 时、由于系统时钟频率更高、器件的电流消耗将增加。
如果代码在启动板上运行正常、但 在调用 SysCtlClockFreqSet()时滞留在定制板上的 faultISR ()中,则可能是定制板上的电源有问题。 可能要检查的事项: