Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/20: Рейтинг темы: голосов - 20, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 61
1

[РЕШЕНО]Настройка таймера

02.12.2016, 10:45. Просмотров 3798. Ответов 7
Метки нет (Все метки)


Добрый день, форумчане.
Не получается никак настроить таймер (TIM3), чтобы прерывание было раз в 1us. Работаю в CoIDE.
Вот настройки:
Код
#include "stm32f10x.h"
//------------
int main(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

GPIOA->CRL &= ~GPIO_CRL_CNF;
GPIOA->CRL &= ~GPIO_CRL_MODE;
GPIOA->CRL |= GPIO_CRL_MODE7_0|GPIO_CRL_MODE7_1;

RCC->CR   |= RCC_CR_HSION; // internal 8 MHz RC ossyttator ON

while((RCC->CR & RCC_CR_HSIRDY) == 0){}

RCC->CFGR &= ~RCC_CFGR_SW;
RCC->CFGR |= RCC_CFGR_SW_HSI;

RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;

TIM3->PSC = 8;
TIM3->ARR = 1;
TIM3->DIER |= TIM_DIER_UIE;
TIM3->CR1  |= TIM_CR1_CEN;

NVIC_EnableIRQ(TIM3_IRQn);

while(1)
{

}
}
//--------------------
void TIM3_IRQHomdler()
{
if(GPIOA->IDR & GPIO_IDR_IDR7)
GPIOA->BSRR |= GPIO_BSRR_BR7;
else
GPIOA->BSRR |= GPIO_BSRR_BS7;
}
После этого смотрю на пине с помощью анализатора наблюдаю такую картину:


<Изображение удалено>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2016, 10:45
Ответы с готовыми решениями:

[Решено] HardFault при попытке настроить прерывание таймера
Здравствуйте. Недавно начал изучать ARM в общем и STM32 в частности, вылезла проблема при попытке...

Правильная настройка таймера
Не понимаю, что делаю не так. Пытаюсь делать простую задержку таймером TIM2 для мигания светодиода....

STM32VL Discovery настройка таймера
Здравствуйте. Пытаюсь научиться нормально работать с учебной платкой STM32VL Dyscovery. Пока...

Настройка таймера на шим и прерывание
Здравствуйте! Мне нужно настроить таймер на шим с прерыванием по спадающему фронту. Собираю проект...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
7
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 61
02.12.2016, 10:47 2
Почему мне не удается добиться 1us? Если поставить TIM3->ARR = 50, то будет 50us...
Спасибо.
0
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 173
02.12.2016, 11:32 3
у таймер в STM32 есть проблемы с формированием коротких импульсов. В частности, чем меньше число в ARR, тем меньше точность.
Поэтому лучше ставить делитель так, чтобы в ARR писать число побольше.

Так же, если не ошибаюсь в предделитель пишется число на 1 меньше, чем требуется. Подробнее в reference manual описано, в разделе регистров.

UPD: и да, точность HSI оставляет желать лучшего, микросенду будет получить проблематично.
0
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 61
02.12.2016, 11:41 4
Да, я заметил, что чем число в регистре автоперезагрузки меньше, тем больше погрешность, но даже если в предделитель поставить число меньше, то меньше 6us не получается добиться. Только что предделитель выставил 2 и ничего не изменилось, т.е. на выходе тоже самое...
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
02.12.2016, 11:44 5
Код
|= TIM_DIER_UIE
Вы собираетесь каждую микросекунду вызывать обработчик прерывания?
0
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 61
02.12.2016, 11:50 6
Сейчас подумал и понял, что действительно каждую микросекунду нет нужды :). На самом деле там там будут больше задержки...
0
0 / 0 / 0
Регистрация: 28.07.2016
Сообщений: 173
02.12.2016, 11:51 7
Вызов прерывания, сброс флага, установка GPIO ... на это время надо. Если уж хочется именно импульс видеть, то используйте режим сравнения - output sompare. настройка не такая уж и сложная
0
0 / 0 / 0
Регистрация: 04.04.2013
Сообщений: 61
02.12.2016, 11:56 8
Да, спасибо...с настройками проблем нет, просто действительно не учел все эти операции. Как я выше написал, то задержки будут больше и в принципе это все обеспечивается :)
Спасибо, видать с утра туплю немного :)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2016, 11:56

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Настройка работы таймера stm32f4 discovery
Настраивается таймер: TIM_TimeBaseInitTypeDef base_timer;...

STM32F0DISCOVERY (STM32F051R8T6) настройка таймера и реализации такта в 1 мкс
Необходимо настроить таймер и получить временную границу между тиками таймера в 1мкс. Как это...

Настройка лап и таймера 1 для PWM контроллера STM32F103VET6
Доброго дня. Понадобилось тут сделать один девайс на вышеуказанном контроллере. До этого работал...

Куча[РЕШЕНО]
Доброе время суток! Извините за нубский вопрос, но все же: где можно узнать адрес начала кучи...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.