Partage de technologie

Minuterie STM32-TIM

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Ce contenu est basé surVidéo STM32 de la technologie JiangxieContenu, organisé.

1. TIM

1.1 Minuterie TIM

  • La minuterie peut compter l'horloge d'entrée et déclencher une interruption lorsque la valeur de comptage atteint la valeur définie.
  • L'unité de base de temps du compteur 16 bits, du pré-échelonneur et du registre de rechargement automatique peut atteindre une synchronisation maximale de 59,65 s sous une horloge de comptage de 72 MHz. 1/(72/65536/65536) (Le compteur est un registre utilisé pour effectuer le comptage. Chaque fois qu'une horloge arrive, le compteur augmente de 1. Le pré-échelonneur peut diviser l'horloge du compteur pour rendre le comptage plus flexible. Redémarrage automatique Le chargé Le registre est la valeur cible du décompte, qui correspond au nombre d'horloges que vous souhaitez compter pour appliquer une interruption. Ces registres constituent la partie centrale de la minuterie. Ce circuit est appelé l'unité de base de temps.
  • Il dispose non seulement de fonctions d'interruption planifiées de base, mais comprend également la sélection de source d'horloge interne et externe, la capture d'entrée, la comparaison de sortie, l'interface d'encodeur, le mode de déclenchement maître-esclave et d'autres fonctions.
  • Selon la complexité et les scénarios d'application, il est divisé en trois types : minuterie avancée, minuterie générale et minuterie de base.

1.2 Type de minuterie

tapernuméro de sériebusFonction
Minuterie avancéeTIM1, TIM8APB2Il possède toutes les fonctions d'un temporisateur général, et possède en outre les fonctions de compteur de répétition, de génération de zone morte, de sortie complémentaire, d'entrée de freinage, etc.
Minuterie universelleTIM2, TIM3, TIM4, TIM5APB1Il possède toutes les fonctions d'une minuterie de base et dispose de fonctions supplémentaires telles que la sélection de source d'horloge interne et externe, la capture d'entrée, la comparaison de sortie, l'interface d'encodeur, le mode de déclenchement maître-esclave, etc.
minuterie de baseTIM6, TIM7APB1Possède les fonctions d'interruption programmée et de déclenchement du mode maître DAC
  • Ressources de minuterie STM32F103C8T6 : TIM1, TIM2, TIM3, TIM4
  • DAC : convertisseur numérique-analogique

1.3 Minuterie de base

La fonction principale :

  • Compteur cumulatif à rechargement automatique 16 bits
  • Pré-échelle programmable 16 bits, utilisé pour diviser l'horloge d'entrée par n'importe quelle valeur comprise entre 1 et 65536
  • Circuit synchrone qui déclenche le DAC
  • Requête d'interruption/DMA générée lors d'un événement de mise à jour (débordement de compteur)

image.png

  • Préscaleur PSC
    L'entrée de l'horloge de comptage de référence est connectée avant le pré-échelonneur. Puisque le temporisateur de base ne peut sélectionner que l'horloge interne, la ligne d'entrée du prescaler peut être considérée comme connectée à l'horloge interne (CK_INT).
    La source de l'horloge interne est le TIMxCLK de RCC. La valeur de fréquence ici est généralement la fréquence principale du système, soit 72 MHz.
    Écrire 0 dans le préscaler signifie pas de division de fréquence ; écrire 1 signifie diviser la fréquence par 2, et la fréquence de sortie = fréquence d'entrée/2 = 36 MHz.
    Écrire 2 signifie diviser par 3 et sortie = entrée/3. Par conséquent, la valeur du pré-échelonneur diffère du coefficient de division de fréquence réel de 1, et le coefficient de division de fréquence réel = la valeur du pré-échelonneur 1. Le préscaler est de 16 bits, donc la valeur maximale peut être écrite sous la forme 65535, qui est divisée par 65536.

  • Compteur CNT
    Le compteur peut compter l'horloge de comptage pré-divisée. Chaque fois que l'horloge de comptage atteint un front montant, la valeur du compteur augmente de 1. Le compteur est également de 16 bits, donc la valeur à l'intérieur peut être ajoutée de 0 à 65535. Si d’autres sont ajoutés, le compteur reviendra à 0 et recommencera. Par conséquent, la valeur du compteur continuera à augmenter pendant le processus de comptage. Lorsque l'incrément atteint la valeur cible, une interruption sera générée et la tâche planifiée sera terminée. Par conséquent, un registre est nécessaire pour stocker la valeur cible, qui est le registre de rechargement automatique.

  • Registre de rechargement automatique
    Le registre de rechargement automatique est également de 16 bits et stocke la cible de comptage à écrire. Pendant le processus en cours, la valeur de comptage continue d'augmenter et la valeur de rechargement automatique est une cible fixe. Lorsque la valeur de comptage est égale à la valeur de rechargement automatique, le temps de synchronisation est écoulé. Ensuite, il générera un signal d'interruption, effacera le compteur et le compteur démarrera automatiquement le prochain temps de comptage.

  • Flèches U et UI
    Une flèche de remise vers le haut dessinée sur l'image signifie qu'un signal d'interruption sera généré ici. Une interruption comme celle-ci dont la valeur de comptage est égale à la valeur de rechargement automatique est généralement appelée « interruption de mise à jour ». Cette interruption de mise à jour conduira au NVIC. Une fois que nous aurons configuré le canal de minuterie du NVIC, le CPU répondra à l'interruption de mise à jour du temporisateur. La flèche vers le bas représente qu'un événement sera généré, et l'événement correspondant est ici appelé « événement de mise à jour ». Les événements de mise à jour ne déclenchent pas d'interruptions, mais peuvent déclencher le travail d'autres circuits internes.

1.4 Minuterie générale

La fonction principale :

  • Compteur d'accumulateur à rechargement automatique 16 bits haut, bas, haut/haut

  • Pré-échelle programmable 16 bits, utilisé pour diviser l'horloge d'entrée par n'importe quelle valeur comprise entre 1 et 65536

  • 4 chaînes indépendantes :

    • capture d'entrée
    • Comparaison des sorties
    • Génération PWM (mode bord ou aligné au centre)
    • Sortie en mode impulsion unique
  • Circuits de synchronisation qui contrôlent les minuteries et les interconnexions de minuterie à l'aide de signaux externes

  • Une interruption/DMA est générée lorsque les événements suivants se produisent :

    • Mise à jour : Débordement/sous-dépassement du compteur, initialisation du compteur (via logiciel ou trigger interne/externe)
    • Événements déclencheurs (démarrage du compteur, arrêt, initialisation ou comptage déclenché par interne/externe)
    • capture d'entrée
    • Comparaison des sorties
  • Prend en charge les circuits d'encodeur incrémental (quadrature) et de capteur Hall pour le positionnement

  • Entrée de déclenchement comme horloge externe ou gestion du courant cycle par cycle
    image.png

  • Compteur de NTC
    Le compteur CNT prend en charge le mode de comptage, le mode de décompte et le mode d'alignement central. Le mode de décompte commence à partir de la valeur de rechargement et décrémente vers le bas après avoir diminué jusqu'à 0, il revient à la valeur de rechargement et demande une interruption. Le mode aligné au centre commence à partir de 0, incrémente d'abord vers le haut, compte la valeur de rechargement et demande une interruption, puis décrémente vers le bas jusqu'à 0, puis demande une interruption.

  • source d'horloge
    La source d'horloge de la minuterie générale peut non seulement choisir l'horloge interne de 72 MHz, mais également choisir une horloge externe.
    (1)La première horloge externe vient deHorloge externe sur la broche TIMx_ETR , c'est-à-dire que vous pouvez connecter une horloge à onde carrée externe à la broche ETR de TIM2, PA0, puis configurer le circuit de sélection de polarité interne, de détection de bord et de pré-échelle, ainsi que le circuit de filtre d'entrée que ces deux circuits peuvent subir. certaine mise en forme. Comme il s'agit d'une horloge à broche externe, il y aura inévitablement des problèmes, de sorte que ces circuits peuvent filtrer la forme d'onde d'entrée. Le signal filtré est divisé en deux canaux. Le canal ETRF supérieur entre dans le contrôleur de déclenchement, puis l'horloge peut être sélectionnée comme unité de base de temps. Cette route est aussi appelée "Mode horloge externe 2”。
    image.png
    (2) TRGI peut également fournir une horloge externe , principalement utilisée comme entrée de déclenchement. Cette entrée de déclenchement peut déclencher le mode esclave de la minuterie. Lorsque TRGI est utilisé comme horloge externe, ce chemin est appelé "Mode horloge externe 1". Quelles sont les horloges externes qui passent par ce chemin ? La première est le signal de la broche ETR. La seconde est le signal ITR. Cette partie du signal d'horloge provient d'autres timers. Le TRGO en mode maître peut conduire à d'autres timers. Lors de la connexion à d'autres timers, il est connecté aux broches ITR des autres timers. ITR0 à ITR3 proviennent des sorties TRGO des quatre autres timers. Vous pouvez également choisir TI1F_ED, qui est connecté ici à l'unité de capture d'entrée. Broche CH1, c'est-à-dire que l'horloge est obtenue à partir de la broche CH1. Le suffixe ED (Edge) signifie ici bord. Il peut également être obtenu via TI1FP1 et TI2FP2 est l'horloge connectée à la broche CH1, et TI2FP2 est connecté à. la broche CH2.
    Résumé : L'entrée du mode d'horloge externe 1 peut être la broche ETR, d'autres minuteries, le bord de la broche CH1, la broche CH1 et la broche CH2.

  • Circuit de comparaison de sortie
    La partie droite ci-dessous est le circuit de comparaison de sortie. Il y a quatre canaux au total, correspondant aux broches de CH1 à CH4, qui peuvent être utilisées pour produire des formes d'onde PWM et piloter des moteurs.

  • Circuit de capture d'entrée
    Sur la gauche se trouve le circuit de capture d'entrée, qui comporte également quatre canaux, correspondant aux broches CH1 à CH4, qui peuvent être utilisés pour mesurer la fréquence de l'onde carrée d'entrée, etc.

  • capturer/comparer le registre
    Le registre du milieu est le registre de capture/comparaison, qui est partagé par les circuits de capture d'entrée et de comparaison de sortie. Étant donné que la capture d'entrée et la comparaison de sortie ne peuvent pas être utilisées en même temps, les registres ici sont partagés et les broches sont également partagées.

1.4 Minuterie avancée

La fonction principale :

  • Compteur d'accumulateur à rechargement automatique 16 bits haut, bas, haut/haut
  • Pré-échelle programmable 16 bits, utilisé pour diviser l'horloge d'entrée par n'importe quelle valeur comprise entre 1 et 65536
  • 4 chaînes indépendantes :
    • capture d'entrée
    • Comparaison des sorties
    • Génération PWM (mode bord ou aligné au centre)
    • Sortie en mode impulsion unique
  • Sorties complémentaires programmables à temps mort
  • Circuits de synchronisation qui contrôlent les minuteries et les interconnexions de minuterie à l'aide de signaux externes
  • Permet à un compteur répétitif d'être mis à jour dans un registre de minuterie après une période de compteur de données spécifiées
  • Le signal d'entrée de frein peut placer le signal de sortie de minuterie dans un état de réinitialisation ou dans un état connu.
  • Une interruption/DMA est générée lorsque les événements suivants se produisent :
    • Mise à jour : Débordement/sous-dépassement du compteur, initialisation du compteur (via logiciel ou trigger interne/externe)
    • Événements déclencheurs (démarrage du compteur, arrêt, initialisation ou comptage déclenché par interne/externe)
    • capture d'entrée
    • Comparaison des sorties
    • Entrée du signal de freinage
  • Prend en charge les circuits d'encodeur incrémental (quadrature) et de capteur Hall pour le positionnement
  • Entrée de déclenchement comme horloge externe ou gestion du courant cycle par cycle

image.png

  • Répéter le compteur
    La différence avec un temporisateur général : la première est d'ajouter un compteur de répétitions là où l'interruption est appliquée. Avec ce compteur, il est possible de réaliser que les événements de mise à jour et les interruptions de mise à jour ne se produisent que tous les quelques cycles de comptage. La structure originale est qu'une mise à jour se produira après la fin de chaque cycle de comptage, ce qui équivaut à diviser à nouveau le signal de mise à jour de sortie.

  • Générateur de zone morte DTG et sortie complémentaire
    Ce qui suit est la mise à niveau du module de comparaison de sortie par la minuterie avancée DTG (génération de temps mort) est un circuit de génération de zone morte. La broche de sortie à droite a été modifiée de celle d'origine à deux sorties complémentaires, qui peuvent produire une paire d'ondes PWM complémentaires. Ces circuits sont utilisés pour piloter des moteurs triphasés sans balais, tels que les avions quadricoptères, les roues arrière des appareils électriques. véhicules et perceuses électriques. Attendez, il peut s'agir d'un moteur triphasé sans balais. Étant donné que le circuit d'entraînement d'un moteur sans balai triphasé nécessite généralement 3 bras de pont, chaque bras de pont est contrôlé par 2 tubes de commutation haute puissance, donc un total de 6 tubes de commutation haute puissance sont nécessaires. Par conséquent, les trois premières broches de sortie PWM deviennent ici des sorties complémentaires. De plus, afin d'éviter le phénomène de traversée à court terme provoqué par les imperfections du dispositif au moment de la commutation lorsque la sortie complémentaire PWM pilote le bras de pont, un circuit de génération de zone morte est ajouté en face. Au moment où l'interrupteur est commuté, une zone morte d'une certaine durée est générée, permettant aux tubes supérieur et inférieur du bras de pont d'être éteints pour empêcher toute transmission.

  • entrée de frein
    La dernière partie est la fonction d'entrée de frein, qui doit fournir une garantie de sécurité pour l'entraînement du moteur. Si la broche externe BKIN (Break IN) génère un signal de freinage, ou si l'horloge interne tombe en panne et qu'un défaut se produit, le circuit de commande coupe automatiquement la sortie du moteur pour éviter les accidents.

1.5 Structure de base de l'interruption programmée

image.png
Contrôle des opérations : contrôlez certains bits du registre, tels que le démarrage et l'arrêt, le compte croissant ou décroissant, etc.
Le côté droit est l'endroit où le signal est envoyé une fois le temps de synchronisation écoulé et l'interruption de mise à jour est générée. S'il s'agit d'une minuterie avancée, il y aura un compteur de répétition supplémentaire. Le signal d'interruption définira d'abord un bit d'indicateur d'interruption dans le registre d'état. Ce bit d'indicateur sera contrôlé via la sortie d'interruption et appliquera une interruption au NVIC. Le contrôle de sortie d'interruption est un bit d'activation pour la sortie d'interruption. Si vous avez besoin d'une interruption, n'oubliez pas de l'autoriser.
image.png
image.png

1.6 Synchronisation du préscaler

image.png

  • Fréquence de comptage du compteur : CK_CNT = CK_PSC / (PSC 1)
  • CK_PSC : horloge Prescaler, l'horloge interne est de 72 MHz.
  • CNT_EN : le compteur est activé, le compteur de haut niveau fonctionne normalement et le compteur de bas niveau s'arrête.
  • CK_CNT : horloge du compteur, qui est à la fois la sortie d'horloge du préscaler et l'entrée d'horloge du compteur.
  • Au début, le compteur n'est pas activé et l'horloge du compteur ne fonctionne pas. Après activation, dans la première moitié de la période, le coefficient de division de fréquence réel est 1 (PSC=0), et l'horloge du compteur est égale à l'horloge avant le pré-échelonneur dans la seconde moitié, le coefficient de division de fréquence réel est 2 (; PSC=1), et l'horloge du compteur. L'horloge devient la moitié de l'horloge avant le prescaler. Piloté par l'horloge du compteur, le registre du compteur suivant continue également d'incrémenter avec le front montant de l'horloge. Après la position médiane FC, la valeur de comptage devient 0. De là, on peut en déduire que la valeur de rechargement automatique ARR est FC. Lorsque la valeur de comptage est égale à la valeur de rechargement et que l'horloge suivante arrive, la valeur de comptage est remise à zéro et un événement de mise à jour est généré ci-dessous. Il s'agit du flux de travail d'un cycle de comptage.
  • Les trois lignes suivantes décrivent un mécanisme de mise en mémoire tampon du registre de pré-échelle. C'est-à-dire qu'il existe en fait deux registres de pré-échelle. L'un est le registre de contrôle du pré-échelle, qui ne détermine pas directement le coefficient de division de fréquence. . Il existe également un registre tampon ou registre fantôme : le tampon prescaler. Ce registre tampon est le registre qui fonctionne réellement. Par exemple, à un certain moment, on change le registre prescaler de 0 à 1. Si à ce moment, on change la fréquence. Le coefficient de division de l'horloge entraînera immédiatement une différence entre la fréquence de la première moitié et de la seconde moitié au cours d'un cycle de comptage. Par conséquent, un tampon est conçu lorsque le nombre atteint la moitié du nombre, la valeur du pré-échelonneur n'est pas modifiée immédiatement. Au lieu de cela, il attendra la fin de ce cycle de comptage et un événement de mise à jour se produira. la valeur du registre du pré-échelonneur sera modifiée. Sera transmise au registre tampon avant qu'elle ne prenne effet.
  • Comme le montre la dernière ligne : le pré-échelonneur s'appuie également sur le comptage pour diviser la fréquence. Lorsque la valeur du pré-échelonneur est 0, le compteur est toujours à 0 et affiche directement la fréquence d'origine lorsque la valeur du pré-échelonneur est 1, le compteur 0, 1, 0, 1, 0, 1 compte comme ceci. Lorsqu'il revient à 0, il émet 1 impulsion de cette façon, la fréquence de sortie est divisée par 2 de la fréquence d'entrée. coefficient de division de fréquence réel. Il y a un décalage d'un nombre.

1.7 Chronométrage du compteur

image.png

  • Fréquence de dépassement du compteur : CK_CNT_OV = CK_CNT / (ARR 1) = CK_PSC / (PSC 1) / (ARR 1)
  • CK_INT : horloge interne 72 MHz ;
  • CNT_EN : Validation compteur, valable sur front montant ;
  • CK_CNT : Compteur d'horloge, car le coefficient de division de fréquence est de 2, cette fréquence est CK_INT divisée par 2. Puis le compteur s'incrémente à chaque front montant de cette horloge. Lorsqu'il atteint 0036, un débordement se produit. Après avoir compté jusqu'à 36, il y a un autre front montant, le compteur est effacé, le compteur déborde et une impulsion d'événement de mise à jour est générée. De plus, un indicateur d'interruption de mise à jour (UIF) est défini. réglé sur 1, une interruption est demandée. Une fois l'interruption répondue, elle doit être effacée manuellement dans le programme d'interruption.

1.8 Le compteur n'a pas de séquence de synchronisation préinstallée.

image.png
Le registre de chargement automatique est passé de FF à 36, et la valeur cible de la valeur de comptage est passée de FF à 36, donc après avoir compté 36 ici, il sera directement mis à jour pour démarrer le prochain tour de comptage.

1.9 Le compteur a un timing préinstallé

image.png
Au milieu du comptage, modifiez la valeur cible de comptage de F5 à 36. Il y a un registre fantôme en dessous. Ce registre fantôme est vraiment efficace, c'est toujours F5, donc maintenant la cible de comptage compte toujours jusqu'à F5, générant un événement de mise à jour en même temps, le 36 à modifier est transmis au fantôme. registre, et dans le décompte suivant Ce changement n'est valide que si le cycle est de 36, donc le but de l'introduction du registre fantôme est en fait pour la synchronisation, c'est-à-dire pour permettre aux changements de valeur et aux événements de mise à jour de se produire de manière synchrone pour éviter les erreurs causées par les changements pendant le fonctionnement.

1.10 Arbre d'horloge RCC

image.png

  • source d'horloge
    Dans le circuit de génération d'horloge, il y a quatre sources d'oscillations :
    (1) HSI : oscillateur RC interne haute vitesse de 8 MHz ;
    (2) HSE : l'oscillateur externe à cristal de quartz haute vitesse de 4 à 16 MHz, également connu sous le nom d'oscillateur à cristal, est généralement connecté à 8 MHz ;
    (3) LSE : oscillateur à cristal externe à basse vitesse de 32,768 KHz, qui fournit généralement l'horloge pour le RTC ;
    (4) LSI : Enfin, il existe l'oscillateur RC interne à basse vitesse de 40 KHz, qui peut fournir l'horloge au chien de garde.
    Les deux oscillateurs à cristal haute vitesse ci-dessus sont utilisés pour fournir l'horloge système. Les horloges de AHB, APB2 et APB1 sont toutes dérivées de ces deux oscillateurs à cristal haute vitesse. C'est juste que l'oscillateur à quartz externe est plus stable que le. Oscillateur RC interne, il est donc généralement utilisé un oscillateur à cristal externe.

  • Horloge de configuration ST
    Dans la fonction SystemInit, ST configure l'horloge : il démarre d'abord l'horloge interne HSI, sélectionne l'horloge interne de 8 MHz comme horloge système et s'exécute temporairement avec l'horloge interne de 8 MHz. Ensuite, démarrez l'horloge externe, configurez l'horloge externe pour entrer dans la boucle à verrouillage de phase PLL pour la multiplication de fréquence, 8 MHz est multiplié par 9 fois et vous obtenez 72 MHz. Une fois la sortie de la boucle à verrouillage de phase stable, sélectionnez la boucle à verrouillage de phase. sortie comme horloge système, de sorte que l'horloge système passe de 8 MHz à 72 MHz.

  • Système de sécurité d'horloge CSS
    CSS (système de sécurité de l'horloge) : le système de sécurité de l'horloge est également responsable de la commutation des horloges. Il peut surveiller l'état de fonctionnement de l'horloge externe en cas de panne, il rebasculera automatiquement l'horloge externe sur l'horloge interne pour assurer le fonctionnement. de l'horloge système et éviter le blocage du programme. Mort causée par accident.

  • circuit de distribution d'horloge

    • Bus AHB : Tout d'abord, l'horloge système 72 MHz entre dans le bus AHB. Le bus AHB a un pré-échelonneur. Le coefficient de distribution configuré dans SystemInit est de 1, donc l'horloge AHB est de 72 MHz.
    • Bus APB1 : Le coefficient de répartition configuré ici est de 2, donc l'horloge du bus APB1 est de 72MHz/2=36MHz.Ci-dessous, si le coefficient du prescaler APB1 = 1, la fréquence reste inchangée, sinon la fréquence*2, puis sur le côté droit, il est ouvert séparément pour les minuteries 2 à 7, car le coefficient de pré-échelle ici est de 2, donc la fréquence ici doit être*2 , donc l'horloge menant aux minuteries 2 ~ 7 est de 72 MHz. Ainsi, qu'il s'agisse d'un timer avancé, d'un timer général ou d'un timer de base, leur horloge de référence interne est de 72 MHz.
    • Bus APB2 : Le facteur de division de fréquence de l'APB2 est de 1, donc l'horloge est de 72 MHz.Ensuite, l'horloge connectée à APB2 est également activée. Autrement dit, si le coefficient du pré-échelonneur APB2 = 1, la fréquence reste inchangée, sinon la fréquence.*2 . Le coefficient de division de fréquence étant de 1, les horloges des temporisateurs 1 et 8 sont à 72 MHz.
    • La partie de sortie d'horloge a une porte ET pour le contrôle de sortie. Le bit de contrôle écrit l'activation de l'horloge externe. C'est là que nous écrivons RCC_APB2/1PeriphClockCmd dans le programme. Pour allumer l'horloge, écrivez 1 dans cette position pour laisser l'horloge gauche. peut être transmis aux périphériques via des portes ET.

2. Fonctions et codes de la bibliothèque TIM

2.1 Fonctions de la bibliothèque TIM

// 恢复缺省配置
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);