Настройка и использование таймеров в STM32
Настройка и использование таймеров в STM32

1. Знакомство с таймерами

Проще говоря, таймер – это счетчик, который используется во всех аспектах нашей жизни, например, в качестве будильников, таймеров и т. д. В справочном руководстве STM32 таймеры разделены на три категории, а именно таймеры расширенного управления (TIM1 и TIM8), общие таймеры (TIMx) и базовые таймеры (TIM6 и TIM7). Чтобы изучить таймеры, вы должны знать, как устанавливать частотное деление. Настройки счетчика.

1. Таймер расширенного управления (TIM1 и TIM8)

Таймеры расширенного управления (TIM1 и TIM8) состоят из 16-битного счетчика автозагрузки, управляемого программируемым прескалером. Он подходит для различных целей, включая измерение ширины импульса входного сигнала (входной захват) или генерирование выходных сигналов (сравнение выходных сигналов, ШИМ, дополнительная ШИМ со встроенным мертвым временем и т. д.). Используя прескалер таймера и прескалер управления тактовой частотой RCC, ширину импульса и период формы сигнала можно регулировать от нескольких микросекунд до нескольких миллисекунд. Таймеры расширенного управления (TIM1 и TIM8) и таймеры общего назначения (TIMx) полностью независимы и не используют общие ресурсы. Они могут работать синхронно

2. Универсальный таймер (TIMx)

Таймер общего назначения представляет собой 16-битный счетчик автозагрузки, управляемый программируемым прескалером. Он подходит для различных приложений, включая измерение длины импульса входного сигнала (входной захват) или генерацию выходных сигналов (выходное сравнение и ШИМ). Используя прескалер таймера и прескалер тактового контроллера RCC, длину импульса и период формы сигнала можно регулировать от нескольких микросекунд до нескольких миллисекунд. Каждый таймер полностью независим и не разделяет друг с другом никаких ресурсов. Они могут работать синхронно вместе,

3. Базовый таймер (TIM6 и TIM7)

Базовые таймеры TIM6 и TIM7 содержат 16-битный счетчик автозагрузки, управляемый собственным программируемым прескалером. Они могут обеспечивать базу времени в качестве таймера общего назначения, в частности, для обеспечения часов для цифро-аналоговых преобразователей (ЦАП). Фактически, они подключены непосредственно к ЦАП внутри чипа и управляют ЦАП напрямую через триггерный выход. Эти два таймера независимы друг от друга и не используют общие ресурсы.

2. Параметры конфигурации общего таймера (TIMx)

1. Параметры, которые необходимо знать при использовании таймера на микроконтроллере

(1) Время таймера;

(2) Функция подсчета внутри микроконтроллера: CNT, CNT непрерывно накапливается (подсчет вверх) или уменьшается (отсчет);

(3) Рассчитайте время для каждого CNT до +1 или -1. Это время рассчитывается по скорости микроконтроллера, то есть по частоте. Подробности см. на рисунке 1. (Цель прескалера — замедлить скорость)

(4) Диапазон значений счетчика: 0-2^16-1 (0-65535), (16-битный счетчик автоматической загрузки).

(5) Как уменьшить скорость счета и использовать частотное деление. Время, соответствующее 72 МГц, составляет 1/72 = 0,013 мкс. Если скорость 72 МГц используется для счета до 65535, необходимое время составляет около 0,013*65535. (HZ соответствует времени). Соотношения следующие: MHZ-us, KHZ-ms, HZ~s).

Рисунок 1
Рисунок 1
2. Поднятые вопросы

(1) Частота самоприращения счетчика составляет 72 МГц. Если вы хотите, чтобы время до +1 было равно 1 мкс, сколько времени потребуется, чтобы досчитать до 65535?

Деление частоты равно 72, а полученная техническая частота равна 1 МГц (1/1 МГц). При счете до 65535 необходимое время составляет 65,535 мс.

(2) Частота самоприращения счетчика составляет 72 МГц. Если вы хотите установить время 500 мс, как вы разделите частоту и как установите максимальное значение счетчика?

Разделение частоты: 720, время для счетчика до +1 каждый раз составляет 10 мкс, а максимальное значение счетчика составляет 50000.

3. Конфигурация таймера

1. Настройка времени 1

(1) Согласно структурной схеме мы можем знать, что таймер 1 установлен на APB2. На рисунке 2 показан бит открытия, а на рисунке 3 показан бит сброса таймера 1.

Рисунок 2
Рисунок 2
Рисунок 3
Рисунок 3

(2) Прескалер TIM1 и TIM8 (TIMx_PSC)

Рисунок 4
Рисунок 4

(3)Регистр автоматической перезагрузки TIM1 и TIM8 (TIMx_ARR)

картина 5
картина 5
2. Реализация кода

(1)timer.c

Язык кода:#include "timer.h"
копировать
/*
Функция функция: Настроить таймер 1
Параметры функции: psc прескалер  значение перезагрузки
*/
void TIMER1_Init(u16 psc,u16 arr)
{
   /*1. Открытые часы*/
   RCC->APB2ENR|=1<<11; //Запускаем часы таймера 1
   RCC->APB2RSTR|=1<<11;//Запустить таймер1сбросить часы
   RCC->APB2RSTR&=~(1<<11);//таймер выключения1сбросить часы
   /*2. Настройка основных регистров*/
   TIM1->PSC=psc-1;
   TIM1->ARR=arr;
   TIM1->CR1|=1<<0; //Запускаем таймер 00
}

(2)main.c

Язык кода:#include "stm32f10x.h"
копировать
#include "led.h"
#include "delay.h"
#include  "key.h"
#include "sys.h"
#include "usart.h"
#include "string.h"
#include "stdio.h"
#include "timer.h"
#include "string.h"
#include  "stdlib.h"
int main(void)
{
  KEY_Init();
	LED_Init();
  USARTx_Init(USART1,72,115200);
	TIMER1_Init(720,50000);
	while(1)
	{
	 if(TIM1->SR&1<<0)
	 {
	 LED0=!LED0;
	 LED1=!LED1; 
	 TIM1->SR&=~(1<<0);
	 }
	}
}

2. Экспериментальные явления

картина 6
картина 6

Я участвую в пятом выпуске специального учебного лагеря Tencent Technology Creation 2024 с эссе, получившими награды. Приходите и разделите приз со мной!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose