Обмен технологиями

Таймер STM32-TIM

2024-07-11

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

Этот контент основан наВидео Jiangxie Technology STM32Содержание, организованность.

1. ТИМ

1.1 Таймер ТИМ

  • Таймер может считать входные часы и вызывать прерывание, когда значение счетчика достигает установленного значения.
  • Блок временной развертки, состоящий из 16-битного счетчика, прескалера и регистра автоматической перезагрузки, может достигать максимального времени 59,65 с при счетной тактовой частоте 72 МГц. 1/(72/65536/65536) (Счетчик — это регистр, используемый для выполнения отсчета времени. Каждый раз, когда поступает тактовый сигнал, счетчик увеличивается на 1. Прескалер может разделить тактовый сигнал счетчика, чтобы сделать подсчет более гибким. Автоматический перезапуск Загруженный Регистр — это целевое значение счетчика, то есть количество тактов, которые вы хотите посчитать, чтобы подать заявку на прерывание. Эти регистры составляют основную часть таймера. Эта схема называется базовым блоком времени.
  • Он не только имеет базовые функции запланированных прерываний, но также включает в себя выбор внутреннего и внешнего источника синхронизации, захват входного сигнала, сравнение выходного сигнала, интерфейс энкодера, режим запуска «главный-подчиненный» и другие функции.
  • В зависимости от сложности и сценариев применения он делится на три типа: расширенный таймер, общий таймер и базовый таймер.

1.2 Тип таймера

типсерийный номеравтобусФункция
Расширенный таймерТИМ1, ТИМ8АПБ2Он имеет все функции общего таймера, а также дополнительно имеет функции счетчика повторений, генерации мертвой зоны, дополнительного выхода, тормозного входа и т. д.
Универсальный таймерТИМ2, ТИМ3, ТИМ4, ТИМ5АПБ1Он имеет все функции базового таймера и дополнительные функции, такие как выбор внутреннего и внешнего источника синхронизации, захват входного сигнала, сравнение выходного сигнала, интерфейс энкодера, режим запуска «главный-подчиненный» и т. д.
базовый таймерТИМ6, ТИМ7АПБ1Имеет функции запланированного прерывания и запуска ЦАП в мастер-режиме.
  • Ресурсы таймера STM32F103C8T6: TIM1, TIM2, TIM3, TIM4
  • ЦАП: цифро-аналоговый преобразователь

1.3 Базовый таймер

Основная функция:

  • 16-битный накопительный счетчик с автоматической перезагрузкой
  • 16-битный программируемый прескалер, используемый для деления входной тактовой частоты на любое значение от 1 до 65536.
  • Синхронная схема, запускающая ЦАП
  • Запрос прерывания/DMA генерируется при событии обновления (переполнение счетчика)

изображение.png

  • Прескалер PSC
    Вход счетчика опорных сигналов подключается перед прескалером. Поскольку базовый таймер может выбирать только внутренние часы, входную линию прескалера можно считать подключенной к внутренним часам (CK_INT).
    Источником внутренней синхронизации является TIMxCLK RCC. Значение частоты здесь обычно соответствует основной частоте системы 72 МГц.
    Запись 0 в прескалере означает отсутствие деления частоты; запись 1 означает деление частоты на 2, а выходная частота = входная частота/2 = 36 МГц.
    Запись 2 означает деление на 3, а выход = вход/3. Поэтому значение прескалера отличается от фактического коэффициента деления частоты на 1, а реальный коэффициент деления частоты = значению прескалера 1. Прескалер 16-битный, поэтому максимальное значение можно записать как 65535, которое делится на 65536.

  • Счетчик CNT
    Счетчик может считать предварительно разделенные тактовые импульсы. Каждый раз, когда тактовые импульсы счетчика достигают нарастающего фронта, значение счетчика увеличивается на 1. Счетчик тоже 16-битный, поэтому значение внутри можно складывать от 0 до 65535. Если добавить больше, счетчик вернется к 0 и запустится снова. Таким образом, значение счетчика будет продолжать увеличиваться во время процесса подсчета. Когда приращение достигнет целевого значения, будет сгенерировано прерывание, и запланированная задача будет завершена. Следовательно, для хранения целевого значения необходим регистр, который является регистром автоматической перезагрузки.

  • Автоматическая перезагрузка реестра
    Регистр автоматической перезагрузки также имеет размер 16 бит и хранит записываемую цель счетчика. Во время работы значение счетчика продолжает увеличиваться, а значение автоматической перезагрузки является фиксированным. Когда значение счетчика равно значению автоматической перезагрузки, время истекло. Затем он сгенерирует сигнал прерывания, обнулит счетчик, и счетчик автоматически начнет следующий отсчет.

  • Стрелки U и пользовательского интерфейса
    Нарисованная на картинке стрелка скидки вверх означает, что здесь будет сгенерирован сигнал прерывания. Подобное прерывание, значение счетчика которого равно значению автоматической перезагрузки, обычно называется «прерыванием обновления». Это прерывание обновления приведет к NVIC. Как только мы настроим канал таймера NVIC, на прерывание обновления таймера будет реагировать ЦП. Стрелка вниз означает, что будет создано событие, и соответствующее событие здесь называется «событием обновления». События обновления не вызывают прерываний, но могут запускать работу других внутренних схем.

1.4 Общий таймер

Основная функция:

  • 16-битный счетчик аккумуляторов с автоматической перезагрузкой вверх, вниз, вверх/вверх

  • 16-битный программируемый прескалер, используемый для деления входной тактовой частоты на любое значение от 1 до 65536.

  • 4 независимых канала:

    • захват ввода
    • Сравнение результатов
    • Генерация ШИМ (режим выравнивания по краю или центру)
    • Выход в режиме одиночного импульса
  • Схемы синхронизации, управляющие таймерами и межсоединениями таймеров с использованием внешних сигналов.

  • Прерывание/DMA генерируется при возникновении следующих событий:

    • Обновление: переполнение/недополнение счетчика, инициализация счетчика (через программное обеспечение или внутренний/внешний триггер).
    • Триггерные события (запуск счетчика, остановка, инициализация или подсчет, запускаемый внутренним/внешним)
    • захват ввода
    • Сравнение результатов
  • Поддерживает схемы инкрементального (квадратурного) энкодера и датчика Холла для позиционирования.

  • Триггерный вход в качестве внешнего тактового сигнала или поциклового управления током.
    изображение.png

  • счетчик CNT
    Счетчик CNT поддерживает режим прямого счета, режим обратного счета и режим выравнивания по центру. Режим нисходящего счета начинается со значения перезагрузки и уменьшается вниз. После того, как оно уменьшится до 0, он возвращается к значению перезагрузки и применяется для прерывания. Режим с выравниванием по центру начинается с 0, сначала увеличивается, подсчитывает значение перезагрузки и применяется для прерывания, а затем уменьшается до 0, а затем применяется для прерывания.

  • источник синхронизации
    В качестве источника синхронизации общего таймера можно выбрать не только внутреннюю тактовую частоту 72 МГц, но также можно выбрать внешнюю тактовую частоту.
    (1)Первые внешние часы отВнешние часы на выводе TIMx_ETR То есть вы можете подключить внешний тактовый сигнал прямоугольной формы к выводу ETR TIM2, PA0, а затем настроить внутренний выбор полярности, схему обнаружения фронта и прескалера, а также схему входного фильтра. Эти две схемы могут подвергаться тактовому сигналу. определенная формовка. Поскольку это внешний тактовый сигнал, неизбежно возникнут некоторые сбои, поэтому эти схемы могут фильтровать входной сигнал. Отфильтрованный сигнал делится на два канала. Верхний канал ETRF поступает в контроллер триггера, а затем в качестве единицы измерения времени можно выбрать часы. Эту дорогу еще называют «Режим внешних часов 2”。
    изображение.png
    (2) TRGI также может предоставить внешние часы. , в основном используется в качестве триггерного входа. Этот триггерный вход может запускать подчиненный режим таймера. Когда TRGI используется в качестве внешнего тактового сигнала, этот путь называется «Режим внешних часов 1". Какие внешние тактовые сигналы проходят по этому пути? Первый - это сигнал вывода ETR. Второй - сигнал ITR. Эта часть тактового сигнала поступает от других таймеров. TRGO в ведущем режиме может привести к другие таймеры. При подключении к выводам ITR других таймеров сигналы от ITR0 до ITR3 поступают от выходов TRGO остальных четырех таймеров. Вы также можете выбрать TI1F_ED, который здесь подключен к блоку ввода. Вывод CH1, то есть тактовый сигнал получается от вывода CH1. Суффикс ED (Edge) здесь означает фронт. Его также можно получить через TI1FP1 и TI2FP2 — тактовый сигнал, подключенный к выводу CH1, а TI2FP2 — к выводу. контакт CH2.
    Краткое описание: Входом для внешнего тактового режима 1 может быть вывод ETR, другие таймеры, фронт вывода CH1, вывод CH1 и вывод CH2.

  • Схема сравнения выходов
    Правая часть ниже представляет собой схему сравнения выходов. Всего имеется четыре канала, соответствующие контактам CH1–CH4, которые можно использовать для вывода сигналов ШИМ и управления двигателями.

  • Входная схема захвата
    Слева находится входная схема захвата, которая также имеет четыре канала, соответствующие выводам CH1–CH4, которые можно использовать для измерения частоты входного прямоугольного сигнала и т. д.

  • регистр захвата/сравнения
    Средний регистр — это регистр захвата/сравнения, который используется совместно схемами захвата ввода и сравнения вывода. Поскольку входной захват и сравнение вывода не могут использоваться одновременно, регистры здесь являются общими, а выводы также являются общими.

1.4 Расширенный таймер

Основная функция:

  • 16-битный счетчик аккумуляторов с автоматической перезагрузкой вверх, вниз, вверх/вверх
  • 16-битный программируемый прескалер, используемый для деления входной тактовой частоты на любое значение от 1 до 65536.
  • 4 независимых канала:
    • захват ввода
    • Сравнение результатов
    • Генерация ШИМ (режим выравнивания по краю или центру)
    • Выход в режиме одиночного импульса
  • Программируемые дополнительные выходы с мертвым временем
  • Схемы синхронизации, управляющие таймерами и межсоединениями таймеров с использованием внешних сигналов.
  • Позволяет обновлять повторяющийся счетчик в регистре таймера после периода счетчика указанных данных.
  • Входной сигнал тормоза может перевести выходной сигнал таймера в состояние сброса или известное состояние.
  • Прерывание/DMA генерируется при возникновении следующих событий:
    • Обновление: переполнение/недополнение счетчика, инициализация счетчика (через программное обеспечение или внутренний/внешний триггер).
    • Триггерные события (запуск счетчика, остановка, инициализация или подсчет, запускаемый внутренним/внешним)
    • захват ввода
    • Сравнение результатов
    • Вход сигнала тормоза
  • Поддерживает схемы инкрементального (квадратурного) энкодера и датчика Холла для позиционирования.
  • Триггерный вход в качестве внешнего тактового сигнала или поциклового управления током.

изображение.png

  • Повторить счетчик
    Отличие от обычного таймера: первый заключается в добавлении счетчика повторений, к которому применяется прерывание. С помощью этого счетчика можно реализовать, что события обновления и прерывания обновления происходят только каждые несколько циклов счета. Исходная структура такова, что обновление будет происходить после завершения каждого цикла счета, что эквивалентно повторному делению выходного сигнала обновления.

  • Генератор зоны нечувствительности DTG и дополнительный выход
    Ниже приводится модернизация модуля сравнения выходов с помощью усовершенствованного таймера DTG (генерация мертвого времени) — это схема генерации мертвой зоны. Выходной контакт справа был изменен с исходного на два дополнительных выхода, которые могут выводить пару дополнительных волн ШИМ. Эти схемы используются для управления трехфазными бесщеточными двигателями, такими как самолеты-квадрокоптеры, с задними электрическими колесами. транспортные средства и электрические дрели. Подождите, это может быть трехфазный бесщеточный двигатель. Поскольку схема привода трехфазного бесщеточного двигателя обычно требует 3 плеч моста, каждое плечо моста управляется двумя мощными переключающими трубками, поэтому всего требуется 6 мощных переключающих трубок. Таким образом, первые три вывода ШИМ здесь становятся взаимодополняющими выходами. Кроме того, чтобы предотвратить явление кратковременного прострела, вызванное несовершенством устройства в момент переключения, когда дополнительный выходной ШИМ управляет плечом моста, спереди добавлена ​​схема генерации мертвой зоны. В момент переключения выключателя создается мертвая зона определенной продолжительности, позволяющая отключить как верхнюю, так и нижнюю трубы плеча моста для предотвращения прострела.

  • вход тормоза
    Последняя часть — это функция входа тормоза, которая должна обеспечить гарантию безопасности моторного привода. Если внешний вывод BKIN (Break IN) генерирует сигнал торможения или внутренние часы выходят из строя и возникает неисправность, схема управления автоматически отключит выход двигателя, чтобы предотвратить несчастные случаи.

1.5 Базовая структура запланированного прерывания

изображение.png
Управление операциями: управление некоторыми битами в регистре, такими как запуск и остановка, обратный отсчет и т. д.
Правая сторона — это место, куда поступает сигнал после истечения времени синхронизации и генерации прерывания обновления. Если это расширенный таймер, будет дополнительный счетчик повторений. Сигнал прерывания сначала устанавливает бит флага прерывания в регистре состояния. Этот бит флага будет управляться через выход прерывания и подавать заявку на прерывание к NVIC. Управление выходом прерывания — это бит разрешения для вывода прерывания. Если вам нужно прерывание, не забудьте его разрешить.
изображение.png
изображение.png

1.6 Синхронизация прескалера

изображение.png

  • Частота счета счетчика: CK_CNT = CK_PSC / (PSC 1)
  • CK_PSC: тактовая частота прескалера, внутренняя тактовая частота составляет 72 МГц.
  • CNT_EN: счетчик включен, счетчик высокого уровня работает нормально, а счетчик низкого уровня останавливается.
  • CK_CNT: тактовый сигнал счетчика, который является одновременно тактовым выходом прескалера и тактовым входом счетчика.
  • Вначале счетчик не включен, и часы счетчика не работают. После включения в первой половине периода фактический коэффициент разделения частоты равен 1 (PSC=0), а тактовая частота счетчика равна тактовой частоте перед прескалером, во второй половине фактический коэффициент разделения частоты равен 2 (; PSC=1) и тактовый сигнал счетчика. Тактовый сигнал становится половиной тактового сигнала перед прескалером. Управляемый тактовым сигналом счетчика, следующий регистр счетчика также продолжает увеличиваться с нарастающим фронтом тактового сигнала. После среднего положения FC значение счетчика становится равным 0. Отсюда можно сделать вывод, что значение автоматической перезагрузки ARR равно FC. Когда значение счетчика равно значению перезагрузки и наступает следующий такт, значение счетчика обнуляется, и ниже генерируется событие обновления. Это рабочий процесс цикла счета.
  • Следующие три строки описывают механизм буферизации регистра прескалера. То есть на самом деле существует два регистра прескалера. Один из них — это регистр управления прескалером, который предназначен для чтения и записи. Он не определяет коэффициент деления частоты напрямую. . Существует также буферный регистр или теневой регистр: буфер прескалера. Этот буферный регистр действительно работает. Например, в определенный момент мы меняем регистр прескалера с 0 на 1. Если в это время меняется частота. коэффициент деления часов немедленно приведет к тому, что частота первой половины и второй половины будет отличаться в течение цикла счета. Поэтому создается буфер. Когда счетчик достигает половины счетчика, значение прескалера изменяется не сразу. Вместо этого он будет ждать окончания этого цикла счета и возникновения события обновления. значение регистра прескалера будет изменено. Будет передано в регистр буфера, прежде чем оно вступит в силу.
  • Как видно из последней строки: прескалер также использует подсчет для деления частоты. Когда значение прескалера равно 0, счетчик всегда равен 0 и напрямую выводит исходную частоту, когда значение прескалера равно 1, счетчик 0. 1, 0, 1, 0, 1 считаются следующим образом. Когда он возвращается к 0, он выдает 1 импульс. Таким образом, выходная частота делится на 2 значения входной частоты. фактический коэффициент деления частоты. Имеется смещение числа.

1.7 Тайминг счетчика

изображение.png

  • Частота переполнения счетчика: CK_CNT_OV = CK_CNT / (ARR 1) = CK_PSC / (PSC 1) / (ARR 1)
  • CK_INT: Внутренние часы 72 МГц;
  • CNT_EN: включение счетчика, действует по нарастающему фронту;
  • CK_CNT: тактовый счетчик, поскольку коэффициент деления частоты равен 2, эта частота равна CK_INT, разделенному на 2. Затем счетчик увеличивается по каждому нарастающему фронту этого тактового сигнала. Когда он достигает 0036, происходит переполнение. После счета до 36 появляется еще один нарастающий фронт, счетчик очищается, счетчик переполняется и генерируется импульс события обновления. Кроме того, устанавливается флаг прерывания обновления (UIF). Если установлено значение 1, запрашивается прерывание. После того, как на прерывание отреагировали, его необходимо очистить вручную в программе прерывания.

1.8 Счетчик не имеет предустановленной временной последовательности.

изображение.png
Регистр автозагрузки был изменен с FF на 36, а целевое значение значения счетчика изменилось с FF на 36, поэтому после подсчета 36 здесь он будет напрямую обновлен, чтобы начать следующий раунд подсчета.

1.9 Счетчик имеет предустановленный таймер

изображение.png
В середине подсчета измените целевое значение подсчета с F5 на 36. Ниже находится теневой регистр. Этот теневой регистр по-прежнему является F5, поэтому теперь цель подсчета все еще считает F5, генерируя событие обновления. В то же время 36, которые нужно изменить, передаются в теневой. регистр, и в следующем отсчете. Это изменение действительно только в том случае, если цикл равен 36, поэтому цель введения теневого регистра на самом деле заключается в синхронизации, то есть в том, чтобы позволить изменениям значений и событиям обновления происходить синхронно, чтобы предотвратить ошибки, вызванные изменениями. во время операции.

1.10 Дерево часов RCC

изображение.png

  • источник синхронизации
    В схеме генерации тактового сигнала имеется четыре источника колебаний:
    (1) HSI: внутренний высокоскоростной RC-генератор 8 МГц;
    (2) HSE: внешний высокоскоростной кварцевый генератор с частотой 4–16 МГц, также известный как кварцевый генератор, обычно подключается к частоте 8 МГц;
    (3) LSE: внешний низкоскоростной кварцевый генератор с частотой 32,768 кГц, который обычно обеспечивает синхронизацию часов реального времени;
    (4) LSI: Наконец, имеется внутренний низкоскоростной RC-генератор с частотой 40 кГц, который может обеспечивать тактовую частоту для сторожевого таймера.
    Вышеупомянутые два высокоскоростных кварцевых генератора используются для обеспечения тактовой частоты системы. Все тактовые сигналы AHB, APB2 и APB1 созданы на основе этих двух высокоскоростных кварцевых генераторов. Просто внешний кварцевый генератор более стабилен, чем внешний. внутренний RC-генератор, поэтому обычно используется внешний кварцевый генератор.

  • Часы конфигурации ST
    В функции SystemInit ST настраивает часы: сначала он запускает внутренние часы HSI, выбирает внутренние 8 МГц в качестве системных часов и временно работает с внутренними 8 МГц часами. Затем запустите внешний тактовый сигнал, настройте внешний тактовый сигнал для входа в фазовую автоподстройку частоты с ФАПЧ для умножения частоты, 8 МГц умножается в 9 раз, и вы получаете 72 МГц. После того, как выходной сигнал фазовой автоподстройки частоты станет стабильным, выберите фазовую автоподстройку частоты. вывод как системные часы, так что системные часы переключаются с 8 МГц на 72 МГц.

  • Система безопасности часов CSS
    CSS (система безопасности часов): система безопасности часов также отвечает за переключение часов. В случае сбоя внешних часов она автоматически переключает внешние часы обратно на внутренние, чтобы обеспечить работу. системных часов и предотвратить зависание программы. Смерть, вызванная несчастным случаем.

  • схема распределения часов

    • Шина AHB: Сначала системная тактовая частота 72 МГц поступает на шину AHB. На шине AHB имеется прескалер. Коэффициент распределения, настроенный в SystemInit, равен 1, поэтому тактовая частота AHB составляет 72 МГц.
    • Шина APB1: настроенный здесь коэффициент распределения равен 2, поэтому тактовая частота шины APB1 составляет 72 МГц/2 = 36 МГц.Ниже, если коэффициент прескалера APB1 = 1, частота остается неизменной, в противном случае частота*2, а затем с правой стороны он открывается отдельно для таймеров 2-7, потому что коэффициент прескалера здесь равен 2, поэтому частота здесь должна быть*2 , поэтому тактовая частота таймеров 2–7 составляет 72 МГц. Поэтому, будь то расширенный таймер, общий таймер или базовый таймер, их внутренняя опорная частота составляет 72 МГц.
    • Шина APB2: коэффициент деления частоты APB2 равен 1, поэтому тактовая частота составляет 72 МГц.Затем включается и тактовый сигнал, подключенный к APB2. То есть, если коэффициент прескалера APB2 = 1, частота остается неизменной, в противном случае частота.*2 . Поскольку коэффициент деления частоты равен 1, тактовая частота таймеров 1 и 8 составляет 72 МГц.
    • Часть выхода тактового сигнала имеет логический элемент И для управления выходом. Бит управления записывает разрешение внешнего тактового сигнала. Здесь мы пишем RCC_APB2/1PeriphClockCmd в программе. Чтобы включить тактовый сигнал, запишите 1 в этом положении, чтобы оставить тактовый сигнал слева. может выводиться на периферийные устройства через логические элементы И.

2. Функции и коды библиотеки TIM

2.1 Функции библиотеки 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);