Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

STM8. Урок 4. Настройка таймера 4. Прерывания таймера

Введение

Таймер 4 является самым простым таймером. Данный таймер является 8-битным. Единственный источник тактирования Timer 4 - это частота ЦПУ. В данном таймере нет блока сравнения, поэтому настройка данного таймера является самой простой.

Задача. Выдавать выдавать меандр с частотой 250кГц с помощью Timer 4.

Для решения данной задачи необходимо вызывать обработчик прерываний таймер с частотой в 2 раза больше 500кГц. В обработчике мы инвертируем сигнал на выбранной ножке. В качестве стенда я использую отладочную плату Stm8L-Discovery.

Для того чтобы запустить таймер необходимо сделать следующие шаги

  1. Подать тактовый сигнал на таймер
  2. Сбросить на всякий случай все настройки таймера
  3. Настроить предделитель таймера и регистра автозагрузки. Все таймеры в stm8 работают в режиме полностью аналогичном сбросу при совпадении (CTC) для контроллеров AVR. Частота переполнения таймера расчитывается по формуле Ftim4_ovf=FCPU/(TIM4_Prescaler*(1+TIM4_Period))
  4. Разрешить прерывания таймера по переполнению
  5. Запустить счет таймера
  6. Включить глобальное разрешение прерывания 

После этого необходимо в файле stm8l15x_it.c найти обработчик прерывания INTERRUPT_HANDLER(TIM4_UPD_OVF_TRG_IRQHandler,25).

В обработчике прерывания записываем все необходимые действия, в нашем случае просто переключаем мигаем светодиодом, и ОБЯЗАТЕЛЬНО сбрасываем флаг прерывания переполнения вызовом функции TIM4_ClearITPendingBit(TIM4_IT_Update).

Вот в принципе и все что нужно для выполнения данной задачи.

Текст программы:

/* Includes ------------------------------------------------------------------*/

#include <stm8l15x.h>

void main(void)

{

// Предделитель частоты тактирования  процессора и периферии

  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

// настраиваем ножку контроллера на в вывод

GPIO_Init(GPIOC, GPIO_Pin_7, GPIO_Mode_Out_PP_High_Slow);  // настраиваем пин РС4 на выход частоты процессора деленного на 64

CLK_CCOConfig(CLK_CCOSource_HSI, CLK_CCODiv_64); //

//------Настройка таймера-------///

//Включаем тактирование таймера

CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);

// На всякий случай сбрасываем все настройки таймера

TIM4_DeInit();

// настраиваем пределитель таймера на 256 и ограничиваем счет 124

TIM4_TimeBaseInit(TIM4_Prescaler_256, //предделитель   124); //Максимальный счет

//Разрешаем Прерывание таймера по переполнению

TIM4_ITConfig(TIM4_IT_Update, ENABLE);

// Включаем счет

TIM4_Cmd(ENABLE);

//Включаем глобальное разрешение прерывания

enableInterrupts();

/* Infinite loop */

 while (1)

 {

 }

}

Обработчик прерывания записан ниже 

INTERRUPT_HANDLER(TIM4_UPD_OVF_TRG_IRQHandler,25)

{

  // Инвертируем выход пина GPIO_ToggleBits(GPIOC, GPIO_Pin_7);

// Сбрасываем флаг прерывания переполнения

TIM4_ClearITPendingBit(TIM4_IT_Update);

}

Проверка результатов.

Для проверки результатов в начале посмотрим частоты работы процессора и периферии, а затем частоты работы прерывания. Для измерения частоты будем использовать китайский цифровой анализатор Saleae Logic. Вещь очень удобная и полезная, которая еще умеет анализировать разные протоколы работы.

Для снятия частоты процессора мы запустили функцию CLK_CCOConfig(CLK_CCOSource_HSI, CLK_CCODiv_64) которая подает сигнал с внутреннего генератора деленный на 64 на ножку PC4.

Как видим 16МГц делим на 64 и получаем 250кГц на ножке РС4. Все нормально.

А теперь вычислим частоты инвертирования уровня на ножке РС7. F= 16000000/(256*(1+124))=500кГц. Значит частоты сигнала будет у нас в 2 раза ниже.

Как видим частота немного плавает все-таки не кварц, но я считаю что точность встроенного генератора очень хорошая.

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Конструктор регулируемого преобразователя напряжения LM317 iMAX B6 - зарядное для Lion, LiPo, LiFe, Pb, NiCd и NiMH аккумуляторов
вверх