CubeMX 的使用实例详细(04.6)- STM32F103的 - 定时器设定 - callback调用 - 实现1S的定时更新LED灯

调用HAL来控制定时器,应该是CubeMX必须走的道路:在CubeMX中需要如何设定?如何利用callback来进行调用?如何计算1S的定时


1 Timer的定时

1.1 CubeMX里面的设定

1.1.1 模式和配置

CubeMX 的使用实例详细(04.6)- STM32F103的 - 定时器设定 - callback调用 - 实现1S的定时更新LED灯_第1张图片

1.1.2 参数配置

CubeMX 的使用实例详细(04.6)- STM32F103的 - 定时器设定 - callback调用 - 实现1S的定时更新LED灯_第2张图片

1.1.3 中断设置

CubeMX 的使用实例详细(04.6)- STM32F103的 - 定时器设定 - callback调用 - 实现1S的定时更新LED灯_第3张图片

中断设置必须打开,才能有中断,从而,才能有中断处理,才有中断回调函数的执行。


2 call back:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* 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_TIM3_Init();
  MX_TIM1_Init();
  MX_TIM4_Init();
  /* USER CODE BEGIN 2 */
  /*##-2- Register a callback function #######################################*/
  if (HAL_TIM_RegisterCallback(&htim1,
                               HAL_TIM_PERIOD_ELAPSED_CB_ID,
                               (pTIM_CallbackTypeDef)HAL_Callback_LED_Blink) != HAL_OK)
  {
    /* Starting Error */
    Error_Handler();
  }


							   
  // it is not a interrupt timer HAL_TIM_Base_Start(&htim1); // Start timer1 Base 1S
  
/*##-3- Start the TIM Base generation in interrupt mode ####################*/
/* Start Channel1 */
if (HAL_TIM_Base_Start_IT(&htim1) != HAL_OK)
{
/* Starting Error */
Error_Handler();
}

注意,这里我们使用的是TIMER的中断,那么时基的开始函数是:

 HAL_TIM_Base_Start_IT

要加IT ,INTERRUPT的后缀,否则是不会来中断的!!!

Call back 函数里面调用GPIO口的设定工作:

void HAL_Callback_LED_Blink(TIM_HandleTypeDef *htim)
{
  // HAL_GPIO_WritePin(LED_INFO_GPIO_Port, LED_INFO_Pin, GPIO_PIN_SET);
  HAL_GPIO_TogglePin(LED_INFO_GPIO_Port,LED_INFO_Pin);
}

 

你可能感兴趣的:(STM32,ARM)