- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- [STM32F2xx] IWDG + Standby mode
[STM32F2xx] IWDG + Standby mode
- rudy
- Посетитель
Это просто так или есть какие-то проблемы с wakeup? Я тут пробовал с ним поиграться, но что-то не получается и как-то странно не получается. Вы с wakeup не работали?
- Alena
- Посетитель
В общем, сделал.
Нашёл ещё ошибку в библиотеках версии 1.0.0. (для F4 семейства)
У них вход в режим STandBy осуществляется так:
00548 void PWR_EnterSTANDBYMode(void)
00549 {
00550 /* Clear Wakeup flag */
00551 PWR->CR |= PWR_CR_CWUF;
00552
00553 /* Select STANDBY mode */
00554 PWR->CR |= PWR_CR_PDDS;
00555
00556 /* Set SLEEPDEEP bit of Cortex System Control Register */
00557 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
00558
00559 /* This option is used to ensure that store operations are completed */
00560 #if defined ( __CC_ARM )
00561 __force_stores();
00562 #endif
00563 /* Request Wait For Interrupt */
00564 __WFI();
00565 }
В то время как в мануале для входа записано:
WFI (Wait for Interrupt) or WFE (Wait for Event) while:
– Set SLEEPDEEP bit in Cortex™-M4F System Control register
– Clear PDDS bit in Power Control register (PWR_CR)
– Select the voltage regulator mode by configuring LPDS bit in PWR_CR
По сей причине код долго не запускался.
после замены на это:
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
PWR->CR &= ~PWR_CR_PDDS;
PWR->CR |= PWR_CR_CWUF;
__WFI();
Всё заработало.
проект во вложении.
В папку с проектом - вложить папку со стандартными библиотеками F4. Всё заработает.
Краткое описание проекта.
1. инициируем порты со светодиодами (на F4Discovery)
2. запускаем RTC
3. Ставим будильник по которому проснётся контроллер через 5 секунд.
4. входим в режим STandBy
5. спим 5 секунд
6. по просыпании возвращаем тактовую частоту на место
7. Продолжаем издеваться над светодиодами.
Примерно так.
- Alena
- Посетитель
Денис Ягов пишет: Добавил к проекту Сторожевую собаку. Чтоб веселее было.