时钟源改成FCLK后的Delay_ms:
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,卡死问题可能与以下因素有关:
针对这些问题,建议你按照以下步骤逐个排查:
同时,建议你提供更详细的代码、调用堆栈和硬件平台信息,以便更准确地定位问题。
如果我的回答解决了您的问题,请采纳!
以下内容引用CHATGPT:
根据问题描述,可能存在以下几种问题:
针对以上问题,可以尝试以下解决方案:
修改 Delay_ms() 函数的实现方式,采用硬件定时器实现延时,避免卡死现象。例如:
void Delay_ms(uint32_t ms)
{
uint32_t tickstart = HAL_GetTick();
uint32_t wait = ms;
while ((HAL_GetTick() - tickstart) < wait)
{
// do nothing
}
}
检查代码中是否存在嵌套过多的情况,可以采用宏定义和函数封装的方式来简化代码。例如:
#define MAX_COUNT 1000
void delay(uint32_t count)
{
for (uint32_t i = 0; i < count; i++)
{
// do nothing
if (i > MAX_COUNT)
{
break;
}
}
}
对代码进行逐行调试,发现问题所在,并进行修复。例如:
void inverse_kinematics(float x, float y, float z)
{
float px, py, pz;
float a, b, c, d, e, f, g, h, i;
float cosb;
// do something
for (uint8_t j = 0; j < 4; j++)
{
// do something
}
// do something
delay(1000); // 延时 1000 微秒
// do something
}
总之,针对这个问题,需要仔细分析代码,找到问题所在,然后采取适当的解决方案。
不知道你这个问题是否已经解决, 如果还没有解决的话: