Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
5 / 5 / 2
Регистрация: 02.10.2013
Сообщений: 147

HAL_RTC_SetAlarm_IT не работает будильник после установки времени

28.04.2018, 11:04. Показов 5185. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Просьба не бить ногами за HAL, с будильником бьюсь уже 3 день, если будильник установить заранее и в программе переустановить время то все работает, но если переустанавливаешь потом будильник то результат 0.
Не могу понять, что устраивает функция HAL_RTC_SetTime в коде программы, и почему блокирует работу будильника при попытке его переустановить.
ПРОЦ stm32f030

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
MX_RTC_Init();
HAL_RTCEx_EnableBypassShadow(&hrtc);
GPIO_SET(GPIOA,8); // прописано в дефайне все пашет
// переустанавливаем время
sTime.Hours = 01;
    sTime.Minutes = 00;
    sTime.Seconds = 00;
    sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
 
HAL_RTCEx_DisableBypassShadow(&hrtc);
    if (HAL_RTC_SetTime(&hrtc,&sTime,RTC_FORMAT_BIN) != HAL_OK){ // эта функция возвращает ОК! если ее закоментить то все работает
        ssd1306_Fill(Black);
        ssd1306_SetCursor(0,10);
        ssd1306_WriteString("Ошибка часов",Font_11x18,White);
        ssd1306_UpdateScreen();
    }   
HAL_RTCEx_EnableBypassShadow(&hrtc);
 
// установка будильника
sAlarm.AlarmTime.Hours = 0;
  sAlarm.AlarmTime.Minutes = 0;
  sAlarm.AlarmTime.Seconds = 40;
  sAlarm.AlarmTime.SubSeconds = 0;
  sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
    //sAlarm.AlarmMask = RTC_ALARMMASK_SECONDS;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 1;
  sAlarm.Alarm = RTC_ALARM_A;
if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK) // возвращает ОК
  {
    ssd1306_Fill(Black);
        ssd1306_SetCursor(0,10);
        ssd1306_WriteString("Ошибка уст",Font_11x18,White);
        ssd1306_UpdateScreen();
  }
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// инициализация RTC
static void MX_RTC_Init(void)
{
 
  RTC_TimeTypeDef sTime;
  RTC_DateTypeDef sDate;
  RTC_AlarmTypeDef sAlarm;
 
    /**Initialize RTC Only 
    */
  hrtc.Instance = RTC;
  hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  hrtc.Init.AsynchPrediv = 99;
  hrtc.Init.SynchPrediv = 399;
  hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  if (HAL_RTC_Init(&hrtc) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
 
    /**Initialize RTC and set the Time and Date 
    */
  sTime.Hours = 0;
  sTime.Minutes = 0;
  sTime.Seconds = 0;
  sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
 
  sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  sDate.Month = RTC_MONTH_JANUARY;
  sDate.Date = 1;
  sDate.Year = 0;
 
  if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
 
    /**Enable the Alarm A 
    */
  sAlarm.AlarmTime.Hours = 0;
  sAlarm.AlarmTime.Minutes = 0;
  sAlarm.AlarmTime.Seconds = 0;
  sAlarm.AlarmTime.SubSeconds = 0;
  sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY;
    //sAlarm.AlarmMask = RTC_ALARMMASK_SECONDS;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 1;
  sAlarm.Alarm = RTC_ALARM_A;
  if (HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2018, 11:04
Ответы с готовыми решениями:

Будильник. Добавить секунды для установки времени
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

VPS server: не работает Rails приложение после установки серверного времени
Всем здравствуйте! Пожалуйста, подскажите советом или помогите решить проблему с запуском приложения на VPS (за оплату или бартер -...

После перезагрузки устройства будильник срабатывает позже заданного времени
Здравствуйте. Столкнулся с такой проблемой - в приложении устанавливаю будильник на определенное время, сохраняю это время в преференс. в...

4
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
28.04.2018, 11:20
dj_oni, может забыл проинициализировать параметр структуры sTime.TimeFormat?
0
5 / 5 / 2
Регистрация: 02.10.2013
Сообщений: 147
28.04.2018, 11:34  [ТС]
_SayHello, структуры проинициализированы, собственно установка времени это подтверждает, т.к. часы показывают именно 1 час. 0 минут 0 сек и нормально считают, тоже самое с будильником.
Подозреваю что HAL_RTC_SetTime (ставит/ снимает) какой то флаг, который не дает функции HAL_RTC_SetAlarm_IT выставить новое значение будильника и войти в прерывание по достижении значения. Что еще больше смущает, что при инициализации используются эти же функции и если в инициализации выставить значение будильника, то все работает.
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
28.04.2018, 11:37
dj_oni, Насколько я понял, Изначально поставили время поставили будильник, все ок. Далее будильник срабатывает, в нем мы переустанавливаем будильник и дальше он не работает?
0
5 / 5 / 2
Регистрация: 02.10.2013
Сообщений: 147
28.04.2018, 12:00  [ТС]
_SayHello,
1. Изначально поставили время, будильник и срабатывает сам каждые (30 секунд) по маске все ок
2. не устанавливаю будильник(при инициализации), устанавливаю его в программе - все срабатывает каждые 30 секунд
3. Изначально поставили время, будильник, переустанавливаем время, переустанавливаю будильник - время переустановилось, будильник НЕ срабатывает

Т.е. стоит в программе использовать HAL_RTC_SetTime будильник больше не работает

Добавлено через 9 минут
Вопрос снят, я ступил, Маска стоит на игнор дня недели и даты, а часы выставляю на час вперед.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2018, 12:00
Помогаю со студенческими работами здесь

Узнать, сколько времени прошло после установки Windows
Как узнать сколько времени прошло с инсталляции Windows через батник?

После установки Денвер работает, а после рестарта перестает работать!
Люди добрые, помогииите! Давно кодю на денвере и на моем компе, тьфутьфутьфу, все пока норм. На другой комп на вин7 профессиональную...

Не работает Java после установки
В общем проблема в том что после установки джавы она не работает,в панели задач значок отображается но если на него нажать ничего не...

Некорректно работает VS после установки CUDA
Добрый день. Visual Studio 2019. Есть проект на C++, готовый, все работает. После установки CUDA сам VS запускается значительно...

Не работает Микрофон после установки Windows 10
Здравствуйте! Ноутбук Lenovo G50-70. Стояла Windows 8. Уставновил сейчас Windows 10 и перестал работать внутренний микрофон. Динамики...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru