реклама на сайте
подробности

 
 
> Кнопка включения и выключения устройства на STM32F103
Salamander
сообщение Dec 21 2013, 20:12
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Коллеги, посоветуйте, как лучше организовать кнопку включения по типу тех, что в мобильниках - по длительному нажатию.

Мне видится так - устройство при подключении питания стартует и тут же уходит в один из режимов пониженного энергопотребления. Но при этом включает на выход один из пинов, на вход другой пин и ждет, когда на этом пине появится сигнал от первого пина (у меня матричная клавиатура). При этом можно конечно завести таймер, но по мне так лучше инкрементировать некую величину и по достижению ей порога пускать программу дальше - выходить из спящего режима. Как выключать? При нажатии на кнопку начинать отсчет, по достижении временного интервала - делать RESET.

По крайней мере, я так делал несколько лет назад на AVR -работало.

Хочу повторить то же на STM32F103, но сами понимаете, насколько в нем все наворочено, а я новичок в работе с этим камнем. На русском информации по спящим режимам, с примерами кода крайне мало. В связи с чем вопросы:

1. Для описанной задачи - какой режим лучше использовать? Нужно ли что-то отключать на старте, подключенное по умлочанию?
2. Как сделать программный RESET?

P.S. устройство уже собрано и поэтому варианты с использованием RTC (встречал в интернете намеки на его исползование в таких задачах) не подойдет. Вариант с использование пина WKUP тоже не подойдет, у меня на него от батареи через делитель подается напряжение, для анализа его при помощи АЦП.

Сообщение отредактировал Salamander - Dec 21 2013, 20:17
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Salamander
сообщение Dec 22 2013, 07:19
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 466
Регистрация: 17-11-12
Пользователь №: 74 443



Нашел я пример, как раз того, что мне надо.
Код
NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE);


    PWR_BackupAccessCmd(ENABLE);

    // RTC clock source configuration ----------------------------------------
    // Reset Backup Domain
    BKP_DeInit();

    // Enable LSE OSC
    RCC_LSICmd(ENABLE);
    // Wait till LSE is ready
    while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

    // Select the RTC Clock Source
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

    // Enable the RTC Clock
    RCC_RTCCLKCmd(ENABLE);

    // RTC configuration -----------------------------------------------------
    // Wait for RTC APB registers synchronisation
    RTC_WaitForSynchro();

    // Set the RTC time base to 1s
    RTC_SetPrescaler(32767);
    // Wait until last write operation on RTC registers has finished
    RTC_WaitForLastTask();
    RTC_SetCounter(0);
    // Wait until last write operation on RTC registers has finished
    RTC_WaitForLastTask();
    // Set the RTC Alarm after 3s
    RTC_SetAlarm(3);
    // Wait until last write operation on RTC registers has finished
    RTC_WaitForLastTask();
    RTC_ITConfig(RTC_IT_ALR,ENABLE);


В обработчике прерывания ничего не писал, просто поставил брейкпоинт.
Запускаю - брейкпоинт не срабатывает.
Мониторю через отладчик RTC->CNTL - инкрементируется, то есть часы тикают...
Куда копать?


Сообщение отредактировал Salamander - Dec 22 2013, 08:24
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Salamander   Кнопка включения и выключения устройства на STM32F103   Dec 21 2013, 20:12
- - IgorKossak   Посмотрите в сторону готовых решений. Можно найти ...   Dec 21 2013, 21:14
- - A. Fig Lee   Reset примерно так: Код#define AIRCR_VECTKEY_MASK...   Dec 21 2013, 21:23
- - Salamander   За RESET спасибо, работает. Насчет RTC - был непр...   Dec 21 2013, 22:23
- - nx6310   В библиотеках stm есть примеры работы с RTC   Dec 21 2013, 22:40
- - smk   Есть же специальный пин PA0. При включении питания...   Dec 22 2013, 08:20
- - Salamander   ЦитатаЕсть же специальный пин PA0. А если так? (с...   Dec 22 2013, 09:07
- - nx6310   Вам надо настроить прерывание по внешней линии EXT...   Dec 22 2013, 09:30
- - Salamander   ЦитатаВам надо настроить прерывание по внешней лин...   Dec 22 2013, 10:14
- - nx6310   При пробуждении из режима standby проц тупо сбрасы...   Dec 22 2013, 10:55
- - Salamander   Заработало! В сухом остатке получилось вот чт...   Dec 22 2013, 14:22
- - nx6310   Вроде все нормально. Если работает то все отлично)   Dec 22 2013, 14:49


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 15:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016