2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Este contenido se basa enVídeo STM32 de tecnología JiangxieContenido, organizado.
tipo | número de serie | autobús | Función |
---|---|---|---|
Temporizador avanzado | TIM1, TIM8 | APB2 | Tiene todas las funciones de un temporizador general, y adicionalmente tiene las funciones de contador de repeticiones, generación de zona muerta, salida complementaria, entrada de freno, etc. |
Temporizador universal | TIM2, TIM3, TIM4, TIM5 | APB1 | Tiene todas las funciones de un temporizador básico, y cuenta con funciones adicionales como selección de fuente de reloj interno y externo, captura de entrada, comparación de salida, interfaz de codificador, modo de disparo maestro-esclavo, etc. |
temporizador básico | TIM6, TIM7 | APB1 | Tiene las funciones de interrupción programada y modo maestro que activa DAC |
La función principal:
Preescalador PSC
La entrada del reloj de conteo de referencia se conecta antes del preescalador. Dado que el temporizador básico solo puede seleccionar el reloj interno, se puede considerar que la línea de entrada del preescalador está conectada al reloj interno (CK_INT).
La fuente del reloj interno es TIMxCLK de RCC. El valor de frecuencia aquí es generalmente la frecuencia principal del sistema de 72 MHz.
Escribir 0 en el preescalador significa que no hay división de frecuencia; escribir 1 significa dividir la frecuencia por 2 y la frecuencia de salida = frecuencia de entrada/2 = 36 MHz.
Escribir 2 significa dividir por 3 y salida = entrada/3. Por lo tanto, el valor del preescalador difiere del coeficiente de división de frecuencia real en 1, y el coeficiente de división de frecuencia real = el valor del preescalador 1. El preescalador es de 16 bits, por lo que el valor máximo se puede escribir como 65535, que se divide por 65536.
Contador CNT
El contador puede contar el reloj de conteo previamente dividido. Cada vez que el reloj de conteo llega a un flanco ascendente, el valor del contador aumenta en 1. El contador también es de 16 bits, por lo que el valor interno se puede sumar de 0 a 65535. Si se agregan más, el contador volverá a 0 y comenzará de nuevo. Por lo tanto, el valor del contador continuará incrementándose durante el proceso de conteo. Cuando el incremento alcance el valor objetivo, se generará una interrupción y se completará la tarea programada. Por lo tanto, se necesita un registro para almacenar el valor objetivo, que es el registro de recarga automática.
Registro de recarga automática
El registro de recarga automática también es de 16 bits y almacena el objetivo de conteo que se escribirá. Durante el proceso de ejecución, el valor de conteo continúa aumentando y el valor de recarga automática es un objetivo fijo. Cuando el valor de conteo es igual al valor de recarga automática, el tiempo se agota. Luego generará una señal de interrupción, borrará el contador y el contador comenzará automáticamente el siguiente tiempo de conteo.
Flechas U y UI
Una flecha de descuento hacia arriba dibujada en la imagen significa que aquí se generará una señal de interrupción. Una interrupción como esta cuyo valor de conteo es igual al valor de recarga automática generalmente se denomina "interrupción de actualización". Esta interrupción de actualización conducirá al NVIC. Una vez que configuremos el canal del temporizador del NVIC, la CPU responderá a la interrupción de actualización del temporizador. La flecha hacia abajo representa que se generará un evento, y el evento correspondiente aquí se denomina "evento de actualización". Los eventos de actualización no provocan interrupciones, pero pueden provocar el funcionamiento de otros circuitos internos.
La función principal:
Contador acumulador de recarga automática arriba, abajo, arriba/arriba de 16 bits
Preescalador programable de 16 bits, utilizado para dividir el reloj de entrada por cualquier valor entre 1 y 65536
4 canales independientes:
Circuitos de sincronización que controlan temporizadores e interconexiones de temporizadores mediante señales externas.
La interrupción/DMA se genera cuando ocurren los siguientes eventos:
Admite codificadores incrementales (cuadratura) y circuitos de sensores Hall para posicionamiento
Entrada de disparo como reloj externo o gestión de corriente ciclo a ciclo
contador CNT
El contador CNT admite el modo de conteo ascendente, el modo de conteo descendente y el modo de alineación central. El modo de conteo descendente comienza desde el valor de recarga y disminuye hacia abajo. Después de disminuir a 0, regresa al valor de recarga y solicita una interrupción. El modo alineado en el centro comienza desde 0, primero aumenta hacia arriba, cuenta el valor de recarga y solicita una interrupción, y luego disminuye hacia abajo a 0, y luego solicita una interrupción.
fuente de reloj
La fuente de reloj del temporizador general no solo puede elegir el reloj interno de 72 MHz, sino que también puede elegir un reloj externo.
(1)El primer reloj externo es deReloj externo en el pin TIMx_ETR Es decir, puede conectar un reloj de onda cuadrada externo al pin ETR de TIM2, PA0, y luego configurar la selección de polaridad interna, la detección de bordes y el circuito preescalador, así como el circuito de filtro de entrada. Estos dos circuitos pueden sufrir el reloj. determinada conformación. Debido a que es un reloj de pines externo, inevitablemente habrá algunos fallos, por lo que estos circuitos pueden filtrar la forma de onda de entrada. La señal filtrada se divide en dos canales. El canal ETRF superior ingresa al controlador de disparo y luego se puede seleccionar el reloj como unidad base de tiempo. Este camino también se llama "Modo de reloj externo 2”。
(2) TRGI también puede proporcionar un reloj externo , Se utiliza principalmente como entrada de disparo. Esta entrada de disparo puede activar el modo esclavo del temporizador. Cuando TRGI se utiliza como reloj externo, esta ruta se llama "Modo de reloj externo 1". ¿Cuáles son los relojes externos que pasan por este canal? El primero es la señal del pin ETR. El segundo es la señal ITR. Esta parte de la señal del reloj proviene de otros temporizadores. El TRGO en modo maestro puede provocar Otros temporizadores Cuando se conecta a otros temporizadores, se conecta a los pines ITR de otros temporizadores. ITR0 a ITR3 provienen de las salidas TRGO de los otros cuatro temporizadores. También puede elegir TI1F_ED, que está conectado aquí a la unidad de captura de entrada. Pin CH1, es decir, el reloj se obtiene del pin CH1. El sufijo ED (Edge) aquí significa borde. También se puede obtener a través de TI1FP1 y TI2FP1 es el reloj conectado al pin CH1. el pin CH2.
Resumen: La entrada al modo de reloj externo 1 puede ser el pin ETR, otros temporizadores, el borde del pin CH1, el pin CH1 y el pin CH2.
Circuito de comparación de salida
La parte derecha a continuación es el circuito de comparación de salida. Hay cuatro canales en total, correspondientes a los pines de CH1 a CH4, que se pueden usar para generar formas de onda PWM y accionar motores.
Circuito de captura de entrada
A la izquierda está el circuito de captura de entrada, que también tiene cuatro canales, correspondientes a los pines CH1 a CH4, que se pueden utilizar para medir la frecuencia de la onda cuadrada de entrada, etc.
capturar/comparar registro
El registro intermedio es el registro de captura/comparación, que es compartido por los circuitos de captura de entrada y comparación de salida. Debido a que la captura de entrada y la comparación de salida no se pueden usar al mismo tiempo, los registros aquí se comparten y los pines también se comparten.
La función principal:
Contador de repetición
La diferencia con un temporizador general: el primero es agregar un contador de repetición donde se aplica la interrupción. Con este contador, es posible darse cuenta de que los eventos de actualización y las interrupciones de actualización solo ocurren cada pocos ciclos de conteo. La estructura original es que se producirá una actualización después de que se complete cada ciclo de conteo, lo que equivale a dividir nuevamente la señal de actualización de salida.
Generador de banda muerta DTG y salida complementaria
La siguiente es la actualización del módulo de comparación de salida mediante el temporizador avanzado DTG (generación de tiempo muerto) es un circuito de generación de zona muerta. El pin de salida de la derecha se ha cambiado del original a dos salidas complementarias, que pueden generar un par de ondas PWM complementarias. Estos circuitos se utilizan para impulsar motores trifásicos sin escobillas, como aviones cuadricópteros y ruedas traseras eléctricas. vehículos y taladros eléctricos. Espera, puede que sea un motor trifásico sin escobillas. Debido a que el circuito de accionamiento de un motor trifásico sin escobillas generalmente requiere 3 brazos de puente, cada brazo de puente está controlado por 2 tubos de conmutación de alta potencia, por lo que se requieren un total de 6 tubos de conmutación de alta potencia. Por lo tanto, los primeros tres pines de salida PWM aquí se convierten en salidas complementarias. Además, para evitar el fenómeno de disparo a corto plazo causado por las imperfecciones del dispositivo en el momento de la conmutación cuando la salida complementaria PWM impulsa el brazo del puente, se agrega un circuito de generación de zona muerta en el frente. En el momento en que se activa el interruptor, se genera una zona muerta de un cierto período de tiempo, lo que permite apagar los tubos superior e inferior del brazo del puente para evitar disparos.
entrada de freno
La última parte es la función de entrada del freno, que proporciona garantía de seguridad para el accionamiento del motor. Si el pin externo BKIN (Break IN) genera una señal de freno, o el reloj interno falla y ocurre una falla, el circuito de control cortará automáticamente la salida del motor para evitar accidentes.
Control de operación: controla algunos bits en el registro, como inicio y parada, cuenta ascendente o descendente, etc.
El lado derecho es donde va la señal después de que se agota el tiempo y se genera la interrupción de actualización. Si es un temporizador avanzado, habrá un contador de repetición adicional. La señal de interrupción primero establecerá un bit de indicador de interrupción en el registro de estado. Este bit de indicador se controlará a través de la salida de interrupción y solicitará una interrupción al NVIC. El control de salida de interrupción es un bit de habilitación para la salida de interrupción. Si necesita una interrupción, recuerde habilitarla.
El registro de carga automática se cambió de FF a 36, y el valor objetivo del valor de conteo cambió de FF a 36, por lo que después de contar 36 aquí, se actualizará directamente para comenzar la siguiente ronda de conteo.
En medio del conteo, cambie el valor objetivo de conteo de F5 a 36. Hay un registro de sombra a continuación. Este registro de sombra es realmente efectivo. Todavía es F5, por lo que ahora el objetivo de conteo todavía cuenta hasta F5, lo que genera un evento de actualización. Al mismo tiempo, los 36 que se van a cambiar se pasan a la sombra. registro, y en el siguiente recuento Este cambio solo es válido si el ciclo es 36, por lo que el propósito de introducir el registro de sombra es en realidad para la sincronización, es decir, para permitir que los cambios de valores y los eventos de actualización ocurran sincrónicamente para evitar errores causados por los cambios. durante la operación.
fuente de reloj
En el circuito de generación de reloj existen cuatro fuentes de oscilación:
(1) HSI: Oscilador RC interno de alta velocidad de 8 MHz;
(2) HSE: oscilador de cristal de cuarzo externo de alta velocidad de 4 ~ 16 MHz, también conocido como oscilador de cristal, generalmente se conecta a 8 MHz;
(3) LSE: oscilador de cristal externo de baja velocidad de 32,768 KHz, que generalmente proporciona el reloj para RTC;
(4) LSI: Finalmente, está el oscilador RC interno de baja velocidad de 40 KHz, que puede proporcionar el reloj para el perro guardián.
Los dos osciladores de cristal de alta velocidad anteriores se utilizan para proporcionar relojes del sistema. Los relojes de AHB, APB2 y APB1 se derivan de estos dos osciladores de cristal de alta velocidad. Solo que el oscilador de cuarzo externo es más estable que el interno. Oscilador RC, por lo que generalmente se utiliza un oscilador de cristal externo.
Reloj de configuración ST
En la función SystemInit, ST configura el reloj: primero inicia el reloj interno HSI, selecciona el reloj interno de 8MHz como reloj del sistema y ejecuta temporalmente el reloj interno de 8MHz. Luego inicie el reloj externo, configure el reloj externo para ingresar al bucle de bloqueo de fase PLL para la multiplicación de frecuencia, 8 MHz se multiplica por 9 y obtendrá 72 MHz. Después de que la salida del bucle de bloqueo de fase sea estable, seleccione el bucle de bloqueo de fase. salida como reloj del sistema, de modo que el reloj del sistema cambie de 8MHz a 72MHz.
Sistema de seguridad del reloj CSS
CSS (sistema de seguridad del reloj): el sistema de seguridad del reloj también es responsable de cambiar los relojes. Puede monitorear el estado de funcionamiento del reloj externo. Una vez que el reloj externo falla, automáticamente cambiará el reloj externo al reloj interno para garantizar el funcionamiento. del reloj del sistema y evitar que el programa se atasque. Muerte causada por accidente.
circuito de distribución de reloj
*2
, y luego en el lado derecho, se abre por separado para los temporizadores 2-7, debido a que el coeficiente del preescalador aquí es 2, por lo que la frecuencia aquí debe ser*2
, por lo que el reloj que lleva a los temporizadores 2 a 7 es de 72 MHz. Por tanto, ya sea un temporizador avanzado, un temporizador general o un temporizador básico, su reloj de referencia interno es de 72MHz.*2
. Como el coeficiente de división de frecuencia es 1, los relojes de los temporizadores 1 y 8 son de 72 MHz.// 恢复缺省配置
void TIM_DeInit(TIM_TypeDef* TIMx);
// 时基单元初始化
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 结构体变量赋一个默认值
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
// 使能计数器---运行控制
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
// 使能中断输出---中断输出控制
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
/*-----------------时基单元的时钟选择---------*/
// 选择内部时钟
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);
// 选择ITRx其他定时器的时钟
void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);
// 选择TIx捕获通道的时钟
void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource,
uint16_t TIM_ICPolarity, uint16_t ICFilter);
// 选择ETR通过外部时钟模式1输入的时钟
void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 选择ETR通过外部时钟模式2输入的时钟
void TIM_ETRClockMode2Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler,
uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);
/*--------------------------------------------------------*/
// 不是用来选择时钟的,单独用来配置ETR引脚的预分频器、极性、滤波参数的
void TIM_ETRConfig(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity,
uint16_t ExtTRGFilter);
// 用来单独写预分频值的
void TIM_PrescalerConfig(TIM_TypeDef* TIMx, uint16_t Prescaler, uint16_t TIM_PSCReloadMode);
// 用来改变计数器的计数模式
void TIM_CounterModeConfig(TIM_TypeDef* TIMx, uint16_t TIM_CounterMode);
// 自动重装器预装功能配置
void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);
// 给计数器写入一个值
void TIM_SetCounter(TIM_TypeDef* TIMx, uint16_t Counter);
// 给自动重装器写入一个值
void TIM_SetAutoreload(TIM_TypeDef* TIMx, uint16_t Autoreload);
// 获取当前计数器的值
uint16_t TIM_GetCounter(TIM_TypeDef* TIMx);
// 获取当前的预分频器的值
uint16_t TIM_GetPrescaler(TIM_TypeDef* TIMx);
/*-------------获取标志位和清除标志位的------------*/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);