Если тебе удалось обмануть человека, то это не значит, что он дурак. Это лишь значит, что тебе доверяли больше, чем ты того заслуживаешь.

Меню навигации для мобильных

Светодиодные матрицы

Автор zenon, 12 Апр., 2024, 11:36

« предыдущая - следующая »

zenon

#25
Случайно удалил свой пост.
Предделитель для 1Гц будет такой:
72000000/7200 = 10000Гц
Предзагрузка 10000.
Прерывание по переполнению счётчика:

↓ спойлер ↓
void TIM13_init(void){
  RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // разрешить тактирование таймера
  TIM3->PSC = 7200 - 1; // предделитель
  TIM3->ARR = 10000 - 1; // предзагрузка
  TIM3->DIER |= TIM_DIER_UIE; // прерывания будем ловить по переполнению счетчика
  TIM3->CR1 |= TIM_CR1_CEN;
  NVIC_EnableIRQ(TIM3_IRQn);
}

void TIM3_IRQHandler (void) {
  if ((TIM3->SR & TIM_SR_UIF) == TIM_SR_UIF) { //  проверяем, что прерывание произошло по событию переполнения счетчика stm32f10x.h
    TIM3->SR &= ~TIM_SR_UIF; // флаг сбросить, иначе при выходе из обработчика прерываний мы тут же попадем туда снова
    LEDTOGGLE; // моргаем
  }
}
[свернуть]
---
Но, у нас ещё есть собственное прерывание на SPI: void SPI1_IRQHandler() :)
https://github.com/minamonra/

Slabovik

Смотрю, озадачил я тебя   ::) Но увы, такова цена многозадачности. Мы ещё реентерабельность ни разу не рассматривали  ;) Впрочем, здесь она не нужна, я полагаю...
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.