MultiTimer 可无限扩展的定时器。记录下移植使用过程

1.下载源码

MultiTimer

2.Keil中添加源码

在这里插入图片描述

3.提供时基接口

uint64_t PlatformTicksGetFunc(void)
{
  return (uint64_t)HAL_GetTick();
}

4.注册使用


MultiTimer timer1;
MultiTimer timer2;

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */
uint8_t  ltestBuff[1] = {0xff};
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C2_Init();
  HAL_I2C_Master_Transmit(&hi2c2, PCF8574_ADDR, ltestBuff, 1, 1000);
  MX_USART2_UART_Init();
//  MX_FATFS_Init();
//  MX_USB_HOST_Init();
  /* USER CODE BEGIN 2 */
  
   multiTimerInstall(PlatformTicksGetFunc);
	
   multiTimerStart(&timer1, 500, timer1_callback, NULL);
   multiTimerStart(&timer2, 1000, timer2_callback, NULL);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	   multiTimerYield();	  
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

5.回调

void timer1_callback(MultiTimer* timer, void* userData)
{
    printf("timer1 timeout!\r\n");

    // restart
    multiTimerStart(timer, 500, timer1_callback, NULL);
}


void timer2_callback(MultiTimer* timer, void* userData)
{
    printf("timer2 timeout!\r\n");

    // restart
    multiTimerStart(timer, 1000, timer2_callback, NULL);
}

6.测试

在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐