最近在调试低功耗,进入低功耗函数如下:
- void vMcuEnterStopMode(void)
- {
- //// for test
- #if 1
-
- __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
- HAL_PWREx_EnableUltraLowPower();
- HAL_PWREx_EnableFastWakeUp();
- HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
-
- SystemClock_Config();
-
- #endif
- }
复制代码 #if 1时进入低功耗功能正常,但是当为#if 0时,程序异常,会停留在main函数开始出的延时处,当时奇怪的是打断点(断点必须在停留延时函数之后)调试时可以的,就是全速仿真运行或者真正运行时功能异常。 停留函数如下:
- void GpioInit(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- __HAL_RCC_GPIOB_CLK_ENABLE();
-
- HAL_GPIO_WritePin(RESET_ASSIST_GPIO_Port, RESET_ASSIST_Pin, GPIO_PIN_RESET);
- GPIO_InitStruct.Pin = RESET_ASSIST_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
- HAL_GPIO_Init(RESET_ASSIST_GPIO_Port, &GPIO_InitStruct);
- HAL_GPIO_WritePin(RESET_ASSIST_GPIO_Port, RESET_ASSIST_Pin, GPIO_PIN_RESET);
- Delay16(6000);
-
- GPIO_InitStruct.Pin = RESET_ASSIST_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- HAL_GPIO_Init(RESET_ASSIST_GPIO_Port, &GPIO_InitStruct);
- }
复制代码 但是将延时函数直接顶替该函数后,功能又正常。 在该函数之前还有大约5ms的延时,将延时增加到30Ms后,功能又正常。
不知道什么原因???
各位大侠请支招哦。谢谢!!!
|
要的就是比编译这个功能,因为调试时进入低功耗比较麻烦,本想用这个功能来屏蔽这部分代码使该函数为空函数,以为空函数不影响,但是好像还是有影响
我以为怕屏蔽了后是空函数,应该能正常工作,但是工作异常,问题是影响的地方居然不是函数调用的地方,所以有点疑惑...
那你把main函数也贴出来看看。。。。
如果这个也不能工作,可能是被优化了,顺便发一下 Delay16(6000)的函数。
main函数没有太多的东西,都是初始化,如下:
void Delay16(uint16_t n)
{
uint16_t tt;
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
for(tt = 0;tt<n;tt++);
}
那你的问题解决了吗...