Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:01

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: STM32 - прерывания.
СообщениеДобавлено: 18 мар 2011, 11:45 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2010, 15:24
Сообщения: 711
Откуда: Украина, Николаев
Помогите разобраться как работать с прерываниями по таймеру.
Cреда - Keil.
Приведенный ниже код работать не хочет, не могу понять ошибку.


#include "stm32F10x.h"
int main(void)
{
SystemInit();
InitLed();

//Разрешить прохождение сигнала к таймеру Т17
RCC->APB2ENR |= RCC_APB2ENR_TIM17EN;

//Настроить предделитель
TIM17->PSC = 1000 - 1;

//Максимальное значение до которого будет считать таймер
TIM17->ARR = 8 - 1;

//Разрешить генерацию события по достижению макс. значения
TIM17->DIER |= TIM_DIER_UIE;

//разрешить работу таймера и его сброс по достижению макс. значения
TIM17->CR1 = TIM_CR1_CEN | TIM_CR1_ARPE;

//установить приоритет и разрешить прерывания
NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 15);
NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);

while(1) {};
}


//**************************************************
// обработчик прерывания //
//**************************************************
u32 test_count;
__irq void TIMER17_IRQHandler(void)
{
if (TIM17->SR & TIM_SR_UIF)
{
TIM17->SR &= ~TIM_SR_UIF;
//управление светодиодом
if (test_count == 0) Led(1,0);
if (test_count == 1000) Led(1,1);
if (++test_count >2000) test_count = 0;
}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 - прерывания.
СообщениеДобавлено: 18 мар 2011, 12:22 
Старожил
Аватара пользователя

Зарегистрирован: 11 мар 2010, 12:44
Сообщения: 1161
Откуда: Default city
Потому, что не сконфигурирован NVIC.
Не знаю, как это делают в кайле, в GCC это
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_####);

_________________
Не дай Бог увидеть нубский ЛУТ, бессмысленный и беспощадный
В МК "на порядок" - это "в два раза"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 - прерывания.
СообщениеДобавлено: 18 мар 2011, 12:43 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2010, 15:24
Сообщения: 711
Откуда: Украина, Николаев
dekar писал(а):
Потому, что не сконфигурирован NVIC.

А это не оно?
NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 15)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 - прерывания.
СообщениеДобавлено: 18 мар 2011, 17:29 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2010, 15:24
Сообщения: 711
Откуда: Украина, Николаев
Изменил название ф-ии обрабатывающей прерывание
на void TIM1_TRG_COM_TIM17_IRQHandler() и все заработало


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 - прерывания.
СообщениеДобавлено: 18 мар 2011, 17:30 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2010, 15:24
Сообщения: 711
Откуда: Украина, Николаев
Может кто подскажет как определять названия этих функций?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32 - прерывания.
СообщениеДобавлено: 18 мар 2011, 17:32 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2010, 15:24
Сообщения: 711
Откуда: Украина, Николаев
Вроде понял как определять имя ф-ии обработчика прерывания.
Нужно открыть файл startup_stm32f10x_md_vl.
В нем указан список векторов прерываний.
Название ф-ии обработчика прерывания должно совпадать с именем соответствующего вектора.
Если не так - поправьте.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Eddy_Em


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB