Easyelectronics.ru

Электроника для всех
Текущее время: 28 сен 2020, 04:23

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



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

Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: внешние прерывания на stm32discovery
СообщениеДобавлено: 11 авг 2011, 21:40 
Здравствуйте!

Зарегистрирован: 11 авг 2011, 21:30
Сообщения: 3
Доброго времени суток.
Помогите разобраться с обработкой внешних прерываний, очень интересно почему при нажатиях на кнопку светодиод нестабильно загорается и нестабильно гаснет. Работаю с кейлом.

Вот собственно код

#include <stm32f10x.h>

char i=0;

void EXTI0_IRQHandler(void)
{
if(i==0) {GPIOC->ODR|=GPIO_ODR_ODR9; i=1;}
else {GPIOC->ODR&=~GPIO_ODR_ODR9; i=0;}
EXTI->PR = EXTI_PR_PR0;
}


void main(void)
{

RCC->APB2ENR|=RCC_APB2Periph_GPIOC|RCC_APB2ENR_AFIOEN|RCC_APB2Periph_GPIOA;

AFIO->EXTICR[0]|=AFIO_EXTICR1_EXTI0_PA;
EXTI->RTSR|=EXTI_RTSR_TR0;
EXTI->IMR|=EXTI_IMR_MR0;
EXTI->FTSR|=EXTI_FTSR_TR0;
GPIOC->CRH&=~0x00000044;
GPIOC->CRH|=0x000000033;

NVIC_SetPriority(EXTI0_IRQn, 15);
NVIC_EnableIRQ(EXTI0_IRQn);

while(1)
{

}

}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 12 авг 2011, 00:19 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
Если вопрос в том, что
maximus писал(а):
светодиод нестабильно загорается и нестабильно гаснет

так это нет подавления дребезга контактов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 12 авг 2011, 00:46 
Здравствуйте!

Зарегистрирован: 11 авг 2011, 21:30
Сообщения: 3
То есть с кодом все в порядке? Если да то как подавить дребезг в контакте?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 12 авг 2011, 00:49 
Здравствуйте!

Зарегистрирован: 11 авг 2011, 21:30
Сообщения: 3
Как сделать так, что бы при нажатии на кнопку светодиод загорался, а при следующем нажатии на кнопку светодиод гас?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 12 авг 2011, 01:17 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
организовать паузу между опросами кнопки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 20 май 2012, 20:00 
Старожил
Аватара пользователя

Зарегистрирован: 09 ноя 2010, 11:05
Сообщения: 2104
Откуда: Казань
блин сижу и туплю в RM касательно EXTI. полчаса уже туплю и пока не могу догнать: Event - что это ? :) С интерраптами понятно, а вот как и когда используются события ?

жара похоже дает о себе знать ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 20 май 2012, 21:43 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
Event - это какое событие. Просто абстрактная, даже скорее промежуточная вещь. Возникает при совпадении каких-то условий, или по изменению состояния пина или регистра.
Например нажал кнопку - возникло событие wakeup. По нему может генериться например прерывание, если они(прерывания) включены, или процессор проснётся, если спал.

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 20 май 2012, 21:52 
Старожил
Аватара пользователя

Зарегистрирован: 09 ноя 2010, 11:05
Сообщения: 2104
Откуда: Казань
я тут отвлекся малость.
Есть два регистра маски, отдельно для прерываний и отдельно для событий. если выставлю бит в регистре маски событий, то на что это повлияет, на что МК будет реагировать. на дрыгания ноги МК вроде как прерывания откликаются. а события ???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 20 май 2012, 23:48 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
Если выставишь маску прерывания - будет прерывание.
Если выставишь маску события - будет событие.
Если выставишь маску и прерывания и события - будет и прерывание и событие.
Событие автоматизирует многие вещи, в отличие от просто прерывания оно может влиять на другие блоки, например wakeup, ADC, DAC и т.д. Конечно можно все эти дела описать в обработке прерывания, но зачем писать лишнее, если можно просто настроить события и, например, настраиваешь триггер ADC на EXTI11, а EXTI11 программируешь на rising pin11 portB и тогда ADC автоматически начнет преобразование при появлении 1 на pin11 portB.

Но кстати чтобы сработало прерывание и/или событие надо настроить Software interrupt event register (EXTI_SWIER).

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: внешние прерывания на stm32discovery
СообщениеДобавлено: 20 май 2012, 23:54 
Старожил
Аватара пользователя

Зарегистрирован: 09 ноя 2010, 11:05
Сообщения: 2104
Откуда: Казань
спасибо. во ща было доходчиво :)


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


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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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