[STM32] Biblioteca HAL - usar temporizador

1. Función de temporización básica


1. Enlace de configuración básica del proyecto (árbol de reloj, selección de RCC, SYS) :
2. Ingrese a TIMx-Mode-Clock Source y seleccione Internal Clock
inserte la descripción de la imagen aquí
3. Fórmula de cálculo de tiempo de temporización
Tiempo de temporización = (Prescaler+1) × (Contador +1) / temporización Por ejemplo, si el
tiempo de temporización es de 1 ms, puede configurar Prescaler = 72-1; Counter = 1000 - 1; (la frecuencia del reloj TIM2 se establece en 72 MHz)
4. Habilite la interrupción del temporizador y genere el proyecto

5. Agregue su código
(1 ) Encuentre la función de interrupción del temporizador de inicio en hal_tim.c y agréguela a la inicialización de la función principal

  /* USER CODE BEGIN 2 */
	HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */

(2) Hay una función de devolución de llamada en hal_tim_ex.c, cópiela en la función principal y agregue su función;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
	{
    
    
		if(htim->Instance == TIM2)
		{
    
    
			//用户代码
		}
}

2. Función PWM

2.1 Función PWM del temporizador ordinario


1. Enlace de configuración básica del proyecto (árbol de reloj, selección de RCC, SYS) :
2. Ingrese TIMx-Mode-Clock Source y seleccione Reloj interno, seleccione el canal PWM que usa
inserte la descripción de la imagen aquí
3. Establezca su frecuencia PWM de acuerdo con la fórmula de cálculo del tiempo de sincronización ,
por ejemplo, el tiempo de sincronización es de 1 ms, puede configurar Prescaler = 72-1; Contador = 1000 - 1; (la frecuencia del reloj TIM2 se establece en 72 MHz), luego la frecuencia PWM es de 1 KHz.
4. Genere el proyecto
5. Agregue su código
(1) Agregue la función de inicio del temporizador en la inicialización

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  /* USER CODE END 2 */

(2) Establecer el ciclo de trabajo PWM

  while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,500);

  }

500 está relacionado con el valor de conteo que establezca. Si establece el valor de conteo en 1000, 500 significa que el ciclo de trabajo es del 50 %.
inserte la descripción de la imagen aquí

2,2, función avanzada de temporizador PWM

Es igual que el temporizador ordinario, pero el nombre de la función es diferente en la inicialización del código y la configuración del ciclo de trabajo.
Cuando se configuran las funciones básicas del temporizador avanzado (TIM1, TIM8),
(1) Cuando el Canal 1 selecciona Generación PWM CH1, la función utilizada es la misma que la del temporizador ordinario igual que

 /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
  /* USER CODE END 2 */
  while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,500);
  }

(2) Cuando Channel1 selecciona PWM Generation CH1N, la función de inicio debe cambiarse

  /* USER CODE BEGIN 2 */
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
  /* USER CODE END 2 */

(3) Cuando Channel1 seleccione PWM Generation CH1N, use las funciones en (1) y (2), en este momento, se generarán dos PWM complementarios,

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);
  /* USER CODE END 2 */
 while (1)
  {
    
    
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,300);

  }

inserte la descripción de la imagen aquí
(4) Más funciones
El temporizador avanzado no solo tiene una salida complementaria, sino que también tiene una función de frenado y un ajuste de tiempo muerto, y se usa principalmente para el control del motor.

Supongo que te gusta

Origin blog.csdn.net/qq_39587650/article/details/119652203
Recomendado
Clasificación