确认HSE_TIMEOUT_VALUE的值是否合适。如果超时值设置得太小,可能会导致程序在启动时等待外部时钟的过程...
调试发现,程序卡在if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)处,不往下进行。原因:重复使能时钟。
后面发现,HAL库有两个隐患:对描述符的处理有问题 因为单片机是Cortex-M7,有Cache和单片机会乱序执行和...
调试发现,程序卡在if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)处,不往下进行。原因:重复使能时钟。。
=HAL_OK){returnHAL_ERROR;}/* Check for the Timeout */if(((HAL_GetTick()-Tickstart)>Timeout)||(Timeout==0U)){if((__HAL_I2C_GET_FLAG(hi2c,I2C_FLAG_STOPF)==RESET)){hi2c->ErrorCode|=HAL_I2C_ERROR_TIMEOUT;hi2c->State=HAL_I2C_STATE_READY;hi2c->Mode=HAL_I2C_MODE_NONE;/...
{if((Timeout ==0)||((HAL_GetTick() - tickstart ) > Timeout)) {/* Update error code */hdma->ErrorCode |= HAL_DMA_ERROR_TIMEOUT;/* Change the DMA state */hdma->State = HAL_DMA_STATE_TIMEOUT;/* Process Unlocked */__HAL_UNLOCK(hdma);returnHAL_TIMEOUT; ...
你这里的while(1)判断的是状态,和超时一点关系都没有,if((Timeout == 0U)||((HAL_GetTick() - Tickstart ) > Timeout))这个才是判断超时的!!!状态采用的查询方式,肯定要等寄存器的状态执行完了才能结束!!! 2019-1-30 09:10:39 评论 举报 卢家辉 提交评论 撰写答案 你正在撰写答案 如果你是...
while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) {if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) {/* Update error code */ hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; /* Change CAN state */ hcan->State = HAL_CAN_STATE_ERROR; ...
0U) 27 { 28 if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) 29 { 30 return HAL_TIMEOUT; 31 } 32 } 33 /***省略掉代码***/ 34 /* 更新SystemCoreClock全局变量 */ 35 SystemCoreClock = HSI_VALUE; 36 37 /* 调整Systick中断时间 */ 38 if (HAL_InitTick(uwTickPrio) != HAL...
if((HAL_GetTick() - tickstart ) > HAL_TIMEOUT_MDMA_ABORT) { hmdma->ErrorCode = HAL_MDMA_ERROR_TIMEOUT; hmdma->State = HAL_MDMA_STATE_ERROR; return HAL_ERROR; } } /* 初始化 MDMA */ MDMA_Init(hmdma); /* 复位列表模式相关设置 */ ...