Перейти к содержанию
    

Баг в HAL_RTC_SetTime(...) для STM32F2

На заметку, вдруг столкнетесь


Нашелся-таки баг stm32f4xx_hal_rtc.c (версия 1.7)

Есть вывод PC13, который я сконфигурировал как GPIO (использую для строчного экрана)

Прикол в том, что мне нужно было установить время с помощью HAL_RTC_GetTime(...) и тут полезли кракозябры по экрану, причем перезапуск контроллера никак не помогал, заработал он только после полного отключения от питания со снятием батарейки часов.
А дело в баге в функции установки часов, кроме установки времени, она пишет всякую ненужную фигню в регистр настройки RTC, из-за чего PC13 переводится на альтернативную функцию, связанную с часами. (какую именно уже не помню, сейчас не у рабочего компа)
Короче как оказалось, это встречается не только в F2 https://community.st.com/s/question/0D50X00009XkWZ5SAN/behaviour-of-pc13-not-as-expected

Дабы не ковырять драйвер, часы перевел на LL и написал свои функции для установки времени.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бог мой! Сорри за оффтоп, но... как этот hal/куб стал активно вылазить на нашем форуме...(((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, haker_fox сказал:

Бог мой! Сорри за оффтоп, но... как этот hal/куб стал активно вылазить на нашем форуме...(((

Пора этот кубострой в раздел ардуинщиков переводить ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, -=az=- said:

Пора этот кубострой в раздел ардуинщиков переводить ...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Совершенно верно!

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зря вы ругаете куб, он абсолютно необходим. Это связано с тем, что периферия у STM32, мало того, что совершенно дебильная, так еще и не имеет подробных описаний. И ее можно заставить нормально работать только получив дополнительную информацию, которая есть только в исходниках HAL драйверов периферии куба.

Естественно напрямую использовать HAL не стоит, слишком накладно и местами неграмотно, следует писать свое глядя на его исходники. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, rudy_b said:

которая есть только в исходниках HAL драйверов периферии куба.

А если её там нет? Выкидывать микроконтроллер на помойку, и ставить другой фирмы? Ведь тогда получается ситуация безвыходная.

2 hours ago, rudy_b said:

у STM32, мало того, что совершенно дебильная,

Я бы сказал, что она особенная. В некоторых местах довольно усложнённая. Но, тем не менее, для stm32f051 я хоть и отлаживал драйвер i2c две (две) недели, но заставил его работать без всяких халов)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, haker_fox said:

А если её там нет? Выкидывать микроконтроллер на помойку, и ставить другой фирмы? Ведь тогда получается ситуация безвыходная.

Я бы сказал, что она особенная. В некоторых местах довольно усложнённая. Но, тем не менее, для stm32f051 я хоть и отлаживал драйвер i2c две (две) недели, но заставил его работать без всяких халов)

Она именно там и есть. Иначе бы ХАЛ не работал. И только там можно найти жизненно важные подробности.

Она не особенная, а именно дебильная. Проверьте как ваш i2c выкручивается из ситуации когда нет ack (однократно) без полного reseta. Про i2c dma тихо промолчу.А уж RTC...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, rudy_b said:

Иначе бы ХАЛ не работал.

так я думаю, что он иногда и не работает. Не может же он быть без ошибок, либо не может удовлетворять на 100% ваши (мои) запросы. А если код нужно сертифицировать по SIL?

1 hour ago, rudy_b said:

Она не особенная, а именно дебильная.

Ну это субъективно)

1 hour ago, rudy_b said:

Про i2c dma тихо промолчу

Насколько я знаю, i2c вообще трудно через dma гнать.

И, тем не менее, остаюсь при своём мнении, что (мне) лучше разобраться самому с периферией, чем потом искать ёжика в тумане (в чужом коде).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, haker_fox said:

И, тем не менее, остаюсь при своём мнении, что (мне) лучше разобраться самому с периферией, чем потом искать ёжика в тумане (в чужом коде).

Я тоже не сторонник HAL и не использую его.

Но, всякие printf, memcpy, memset, strlen и т.д., и т.п. тоже Ёжик в тумане ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работал недавно с stm32h7.

Начал с куба, но потом взял всё, что нагенерил куб и немного переделал, хотя от функций хала и не отказался. Кстати, с функцией HAL_RTC_GetTime тоже немного пришлось повозиться. Как выяснилось, её можно применять только одновременно с HAL_RTC_GetDate. Это распромьраняется и на SetTime/Date. Причем написано об этом маленьким шрифтом в исходнике хала и только об одной из пар функций. Хал, на мой взгляд, действительно написан чересчур заумно. Не столько периферия, сколько сам хал. По сравнению с Силабз - мутная заумь. Из багов самого камня могу назвать непродуманность dma2d - двумерного дма, который, к примеру, в определенных режимах требует, чтобы область была выровнена по границе 4 байт и имела размер кратный 4 байта. Я писал gui, испольуя только внутреннюю память, поэтому использовал 8 бит цвет и значит все видеопримитивы у меня вынужденно были кратны 4 пикселям. I2c, spi, rtc, lcd контроллер - всё запустилось практически без проблем. Очень много сил отняла борьба с кэшем. Для этого чипа работать без него - существенное замедление, а с ним всё время зависает на dma2d,пришлось повозиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, dimka76 сказал:

 

Но, всякие printf, memcpy, memset, strlen и т.д., и т.п. тоже Ёжик в тумане ?

Ну их-то грамотные люди пишут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это вопрос везения. Какие бы грамотные люди ни писали, сложность современного железа и софта такова, что всё проверить банально не удаётся. И если всё хорошо, то Вы берете сгенерировагные исходники или пример, копируете и это здорово экономит время. Но если есть необходимость в оптимизации или нестандартном подходе - действительно, приспособление и борьбы с чужими тараканами по времени может выйти дороже, чем сесть и рабобраться самому, если (!) Есть нормальная документация. Нет её - вилы эмалированые, как в случае со всякими квалкомами, бродкомами, и ёже с ними. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, dimka76 said:

Но, всякие printf, memcpy, memset, strlen и т.д., и т.п. тоже Ёжик в тумане ?

Нет, не ёжик. Это часть стандартной библиотеки, поставляемой с компилятором. Компилятор, в моём случае, IAR. Имеет сертификаты. Можно доверять) Но именно доверять, и проверять. Ибо в соответствующей ветки в компиляторе этом уже не раз находили ошибки. В случае слишком ответственных применений, насколько мне известно, переписывают и эту библиотеку. 

Кстати, некоторые коммерческие, и не только, проекты не расчитывают на эти функции, а предлагают через дефайны выбрать, что использовать: их собственный вариант, или из стандартной библиотеки, ну или ваш собственный. Пример: файловая система Reliance Edge, LwIP.

7 hours ago, falling_stone said:

чтобы область была выровнена по границе 4 байт и имела размер кратный 4 байта

А это не ограничение периферии?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, dimka76 сказал:

Но, всякие printf, memcpy, memset, strlen и т.д., и т.п. тоже Ёжик в тумане ?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...