0 / 0 / 0
Регистрация: 15.10.2013
Сообщений: 39
1

Странное поведение флагов таймера.

15.11.2013, 03:12. Показов 4162. Ответов 0
Метки нет (Все метки)

Работаю на STM32VLDyscovery (STM32F100RB)

Потребовалось мне получить от таймера два прерывания. Одно по переполнению, одно по совпадению в первом канале (CCR1). Все настроил на таймере TIM4, прерывания происходят, но я не могу определить какое из них произошло...

После возникновения прерывания смотрю в регистр статуса TIM4->SR;, а там 0x1f - 11111b. Что за мистика? Должно же ведь быть 00001b при возникновении переполнения, или 00010b при совпадении. Ничего не понимаю.
Закомментировал строки разрешающие прерывание по совпадению и загружающие регистр TIM4->CCR1. Всеравно в прерывании по переполнению регистр статуса содержит 11111b. Проверял содержимое регистра статуса под отладчиком в Кокосе. В чем же дело? Что я делаю не так?

Вот код:

Код
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

int main() {

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);

// настройка таймера
TIM4->PSC = 24000 - 1;           // Настраиваем делитель что таймер тикал 1000 раз в секунду
TIM4->ARR = 1000;                 // Чтоб прерывание случалось 1 раз в секунду
//TIM4->CCR1 = 200;                 // Скважность импульсов.
TIM4->DIER |= TIM_DIER_UIE;   //разрешаем прерывание от таймера
//TIM4->DIER |= TIM_DIER_CC1IE; //разрешаем прерывание по сравнению.
TIM4->CR1 |= TIM_CR1_CEN;     // Запуск таймера

NVIC_EnableIRQ(TIM4_IRQn);    //Разрешение TIM4_IRQn прерывания

RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN , ENABLE);

while(1)
{
//Программа ничего не делает в пустом цикле
}
}

void TIM4_IRQHomdler(void)
{
int status,count;
count = TIM4->CNT;
status = TIM4->SR;
TIM4->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
//TIM4->SR &= ~(TIM_SR_CC1IF);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2013, 03:12
Ответы с готовыми решениями:

Странное поведение таймера
Добрый день. STM8S003K3T6C, IAR 1.31 частота МК 16мгц, настраиваю таймер с периодом...

Странное поведение FatFs
Здравствуйте. Такая ситуация. Есть проект, использующий USB флэшку как накопитель. Процессор...

Странное поведение мигалки
Написал простой код чтобы мигать PC8 на STM32VL Dyscovery. Код запустил и он работал. Потом я жал...

Keil странное поведение
Непонятки. Ситуация такая. Есть файл stm32f10x.h и файл w5100.h. В w5100.h: #define IMR...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2013, 03:12

Странное поведение МК (STM32F100RBT6B) - подскажите!
Обращаюсь к сообществу потому что в тупике - практика не совпадает с теорией! Сделал плату на...

Странное поведение STM32 VL Discovery
Доброго времени суток. Есть у меня плата STM32 VL Dyscovery с контроллером STM32RBT6. Долгое...

Странное поведение USART в stm32f103rb
Собственно, в чем проблема. Есть кольцевой буфер. Настраиваю usart, настраиваю прерывания по TXE,...

Странное поведение STM32F407VG при прошивке.
Всем добрый день. Подключил контроллер stm32f407vg по приведенной во вложении схеме. Шить его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru