例程Hal"/>
MM32火龙果Pitaya lite开发板例程Hal
博主这几天在看Pitaya lite例程库时,下载了第一个例程,就出现程序卡死的问题(运行在固定的一行,我以为是卡死)。调用Hal_Delay后,程序不进入下一行;Hal_Delay函数
/*** @brief 利用滴答定时器实现的延时函数,默认单位是ms* * @param Delay */
void HAL_Delay(unsigned int Delay)
{volatile uint32_t tickstart = HAL_GetTick();volatile uint32_t wait = Delay;/* Add a freq to guarantee minimum wait */if (wait < 0xFFFFFFFFU){wait += (uint32_t)(1);}while ((HAL_GetTick() - tickstart) < wait){}
}
这个minimum wait显然是用在高速计数器中的,计数超过最大值跳过一个周期来使用的,应该要判断的,这个例程中直接使用了。修改如下(代码有不足的,还请批评指正)
void HAL_Delay(unsigned int Delay)
{volatile uint32_t tickstart = HAL_GetTick();volatile uint32_t wait = Delay;// /* Add a freq to guarantee minimum wait */
// if (wait < 0xFFFFFFFFU)
// {
// wait += (uint32_t)(1);
// }if ( 0xFFFFFFFFU-wait>tickstart){while ((HAL_GetTick() - tickstart) < wait){__NOP();}}else{wait = HAL_GetTick() - tickstart;while ((HAL_GetTick() - tickstart)){__NOP();}while ((HAL_GetTick() - tickstart) < wait){__NOP();}}
}
原代码的操作导致要等待49天左右,让人摸不着头脑。我之前还以为是初始化或者读地址出现了错误,最后手搓出来了串口字符串输出函数,输出了中间变量(debug查看计数器我感觉很麻烦,还会打断运行),才确定初始化没问题。再仔细看代码,才看出端倪,这些代码都不Review的吗?!!之前查论坛,对应板块下没有帖子;找淘宝的客服要的QQ群也验证不通过。这款开发板真的不推荐。
更多推荐
MM32火龙果Pitaya lite开发板例程Hal
发布评论