|
Tromomd
|
|
Проблема с таймером TIM212.01.2013, 16:03. Показов 9344. Ответов 15
Метки нет (Все метки)
Добрый день! Нужна ваша помощь.
Проблема в том, что в режиме отладки, сразу после включения таймера (TIM2->CR1 |= TIM_CR1_CEN;), устанавливается бит в регистре прерывания (CC1IF), хотя значение таймера не равно CCR1 и при этом переход на вектор прерывания не происходит. Что делать? Пробовал менять значения CCR1, PSC, ARR. Вот код программы: #include "stm32f10x.h" void TIM2_IRQHomdler (void) { TIM2->CR1=0x0000; TIM2->SR &= ~TIM_SR_UIF; // очищаем флаг TIM2->SR &= ~TIM_SR_CC1IF; GPIOC->BSRR=GPIO_BSRR_BS9; //Вкл } int main(void) { __enable_irq(); NVIC_EnableIRQ(TIM2_IRQn); RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOC->CRH |= GPIO_CRH_MODE9_0 | GPIO_CRH_MODE9_1; GPIOC->CRH &= ~ GPIO_CRH_CNF9; GPIOA->CRL &= ~GPIO_CRL_MODE0; GPIOA->CRL &= ~GPIO_CRL_CNF0_0; GPIOA->CRL |= GPIO_CRL_CNF0_1; GPIOA->ODR &= ~GPIO_ODR_ODR0; RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // вкл тактирование таймера TIM2->DIER |= TIM_DIER_CC1IE;//прер по сравн первый канал бит - CC1IE TIM2->PSC = 7; // пределитель 8000000/60000 - 1 TIM2->CCR1 = 700; // с каким значением сравниваем TIM2->ARR = 5000; TIM2->CR1 |= TIM_CR1_CEN; // запускаю while(1){ } } Для проектов использую IAR |
|
| 12.01.2013, 16:03 | |
|
Ответы с готовыми решениями:
15
проблема с таймером и прерыванием Проблема с таймером в Center Aligned Mode STM32L152 проблема с таймером(ногой PB12) и DAC(PA5) |
|
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
|
|
| 12.01.2013, 19:08 | |
|
Перед включением таймера сгенерируй событие обновления:
TIM2->EGR|=(TIM_EGR_UG); и будет тебе счастье. Все настройки тактирования сравненияи и т. д. перегружаються в рабочие регистры после события обновления. Когда это события наступает - читай доку.
0
|
|
|
Tromomd
|
|
| 12.01.2013, 20:09 | |
|
Спасибо!
теперь с CC1IF всё ок, только теперь друга проблема - на вектор прерывания не переходит |
|
|
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
|
|
| 12.01.2013, 20:45 | |
|
Эт, непонял...Что куда не переходит ??? Не заходим в функцию обработки прерывания ??
0
|
|
|
Tromomd
|
|
| 13.01.2013, 12:43 | |
|
Да, в void TIM2_IRQHomdler (void)
|
|
|
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
|
|
| 13.01.2013, 15:43 | |
|
У меня все работает, в прерывания заходим. НО.
Первое: ножно включить режим предзаграузки, раз уж задал величину предзагрузки: TIM2->ARR = 5000; TIM2->CR1|=TIM_CR1_ARPE; второе - частота мерцания у тебя будет 1,663 кГц....??? третье - в прерывании ты выключаеш таймер, учти. С уважением ))
0
|
|
|
Tromomd
|
|
| 13.01.2013, 20:51 | |
|
Частота эт я просто экспериментировал =) Сейчас у меня частота 1 гц.
Почему-то после фун-ции разрешения прерывания NVIC_EnableIRQ(TIM2_IRQn); у меня в регистре NVIC устанавливается бит в регистре SITENA0 (т.е. разрешение прерывания) и при этом бит в регистре CLRENA0 (выключение прерывания), как так? |
|
|
wro
|
||||||
| 18.01.2013, 01:06 | ||||||
|
У меня немного другая проблема:
Работаю с таймером по прерываниям. Использую функции (не напрямую с регистрами) Возникла проблема: при инициализации таймера даю разрешение на прерывание, но не включаю таймер (он включается из кода). Так вот, при вызове в инициализаторе NVIC_EnableIRQ(TIM2_IRQn); моментально происходит прерывание по переполнению (с переходом на обработчик). Откуда прерывание (таймер еще даже не включен)? Параллельно интересует какой функцией устанавливается текущее значение счетчика? На всякий привожу код:
|
||||||
|
wro
|
||||||||||||||||
| 20.01.2013, 17:01 | ||||||||||||||||
|
Не ужели ни у кого такой проблемы не возникало?
Почему при вызове
Код main():
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 701
|
|
| 20.01.2013, 19:10 | |
|
Ну... это вообще жесть... )))
TIM_TimeBaseInitStructure.TIM_Pressotir = (uint16_t)(84000 - 1); А так... тактирование в наличии, биты юзабельны... Прерывание разрешено, если бит взведён - вэлком то прерывание... Смотрите состояние регистров TIM по входу в прерывание...
0
|
|
|
wro
|
||
| 20.01.2013, 19:41 | ||
|
1) Спасибо за ответ.
84000 - была тактовая частота 84 Мгц. (на полной - 168 000) 2) Сбросить это прерывание (при инициализации) как то можно? |
||
|
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 38
|
||
| 20.01.2013, 20:57 | ||
84000 - была тактовая частота 84 Мгц. (на полной - 168 000) 2) Сбросить это прерывание (при инициализации) как то можно? 1) unit16_t - 16 бит, максимальное значение - 65535, туда не получится 83к запихать 2) помню тоже была такая проблема - при инициализации происходило незапланированное прерывание, но это было с АЦП и в принципе было некритично, так что ничего с этим не делал =)
0
|
||
|
wro
|
||
| 21.01.2013, 00:58 | ||
|
1) ой... протупил
2)
|
||
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 701
|
|
| 21.01.2013, 01:16 | |
|
Сказал же... тормознитесь сразу после входа в прерывание и посмотрите TIM_SR... будет ясна причина...
Как правило всё сводится к установке TIM_EGR_UG при инициализации, ожиданию пару тактов, сбросу TIM_SR, разрешению прерываний и т.д. ...
0
|
|
|
wro
|
|
| 21.01.2013, 02:17 | |
|
Спасибо за ответ. Но это пока не мой формат - знаний по регистрам пока не хватает.
|
|
|
wro
|
||||||
| 27.01.2013, 18:59 | ||||||
|
Может кому тоже понадобится: проблема решилась установкой бита URS в TIMx_CR1
|
||||||
| 27.01.2013, 18:59 | |
|
Помогаю со студенческими работами здесь
16
помогите с TIM2 Прерывание от TIM2 Прерывание таймера TIM2 TIM2 задержка в 1 сек Захват и переполнение TIM2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|