TouchGFX 時鍾應用handleTickEvent不准問題及解決方案


前言

在使用TouchGFX制作時鍾應用時,一般會使用handleTickEvent函數作為時基,其頻率為60HZ,在仿真時運行正常,定時准確。但下載到MCU后,由於受到Freertos的調度,其實際頻率只有50HZ左右,因此會導致時間不准確。

解決方案

開啟一個定時器作為時鍾的時基,1s中斷一次,更新全局的時間。在handleTickEvent中以小於0.5s的頻率刷新,解決跳秒問題。具體操作如下。

設置定時器

首先查看定時器時鍾。我使用的是stm32f429,在f4中,TIM1、8、9、10、11掛載在APB2總線,其余掛載在APB1總線。預計使用TIM13,其總線頻率為90HZ。

設置定時器


代碼編寫

HAL_TIM_Base_Start_IT(&htim13); //在main函數中打開TIM13的全局中斷

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //中斷回調函數,一般在main文件下方會自動生成一個,沒有的話自行添加
{
  /* USER CODE BEGIN Callback 0 */

  /* USER CODE END Callback 0 */

  /* USER CODE BEGIN Callback 1 */
	if (htim->Instance == TIM13) {
		if (++seconds >= 60)
        {
            seconds = 0;
            if (++minutes >= 60)
            {
                minutes = 0;
                if (++hours >= 24)
                {
                    hours = 0;
                }
            }
        }
  }
  /* USER CODE END Callback 1 */
}


void Screen1View::handleTickEvent() //在VIEW中更行時鍾
{
    tickCounter++;

    if (tickCounter % 20 == 0)
    {
	hours = presenter->getHour();
	minutes = presenter->getMinute();
	seconds = presenter->getSeconds();
				
        // Update the clocks
        digitalClock1.setTime24Hour(hours, minutes, seconds);
    }
}

------------恢復內容結束------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM