Главная » Микроконтроллеры
Призовой фонд
на август 2019 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Паяльник
3. 200 руб.
От пользователей

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

Программатор Pickit3
Программатор Pickit3
Мультиметр Mastech MS8239C Мультиметр DT9205A
вверх