Проверял этот вопрос. Если слать без инициализации RTC символы и числа - не глючит (минимум - сутки). Работает "как часы". Если же инициализировать RTC и после этого слать что угодно - хоть число 88888, то через минуту появляются кракозябры.
Проверяю уже на другом blue pill-е подключенному к другому LCD1602 на макетке. Больше ничего не подключено. Эффект тот же.
Склонен считать, что это какой-то хитрый конфликт библиотек (по прерываниям что ли или общей области памяти, или некорректным указателям...). На этой библиотеке есть переход в режим посылки по 4 бита, а не 8. Вот, возможно, в него переключается. Причем непредсказуемо когда. Попробую его запретить. Вспомнил, что такие же кракозябры (много символа из четырех горизонтальных черточек, например) я когда-то видел при работе с этой же библиотекой и другим девайсом (SI5351) по I2C.
Библиотека навороченная, универсальная - и для ардуины, и stm32 и ESP32...
name = LiquidCrystal I²C
version = 1.2.4
author = Enjoyneering <enjoyneering@protonmail.com>
мож тема не моя но выскажусь вслух сам по себе DCDC поока он испавен не спалит ничего болетого он даже лучше зашитить от импулдсных помех чем линейний
2 таки ништо не вечно банки пухнут/сохнут ESR растет при некотом критичном значени очередно ПП при комутации в сети может ПОЙТИ НЕ ПОПЛАНУ...
DCDC пашут годы милионами штук применяься в 100500девайсах и при этом не имеют существеных проблем...
вводить доп линейник в питание цифросхемы ЛИШНЕЕ вот еслиб там была линейная часть тогда да стоит...
3 самое хреновое когда разное питание разных цифровых узлоф -5 и 3в3 нужны конвертеры уровня а если решение костылное то может подвести...
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Подключил дисплей через преобразователь уровней +5в а на blue pill +3.3 в. Я уж надеялся, что это и есть ответ (ибо очень логично) - но нет. Все то же...
*** Посмотрел я библиотеку Liquid_Crystal_I2C. Нормально шлет данные или кодовые символы через Wire (библиотеку собственно I2C). Читать это все трудно т.к. очень много корявых имен и меток неизвестно в каком инклюде прописанных. Но вроде бы ничего подозрительного.
Попробую (после инициализации RTC) выводить символы на Serial (т.е. на терминал Arduino IDE через USB) и на какой-нибудь другой индикатор по SPI.
Вопрос серьезным спецам по stm32 - может ли быть какое-то пересечение по таймерам, используемым в I2C (на PB6, PB7) и в RTC, например, при конфигурировании в регистре состояния по невнимательности автора библиотеки взвели/сбросили еще какие-нибудь биты по тому же адресу и "задели" не свой таймер. Или что-нибудь по обработке и запрете прерываний... Или что-то в тактировании сделали неаккуратно.
Я не вникал в это все досконально, но общее представление имею.
Напишу в сумме доводы против аппаратной причины появления кракозябров.
1. Ставил преобразователь уровней.
2. Менял индикаторы и blue pills
3. Пропаивыл часовые кварцы и иже с ними на платах.
4. Мыл флюс спиртом.
5. Уменьшал в 5 раз (от 100000 до 20000) скорость I2C.
6. Переходил на тактирование часов по LSI - т.е. по внутреннему генератору в самом кристалле.
7. Менял батарейку на новую.
Все это (точнее, ничего из этого) НЕ ВЛИЯЕТ!
Документацию специально для меня, ленивого, читать не надо - но вдруг что на слуху есть. Впрочем, и сам посмотрю.
*** Сделал пока "костыль" - инициализацию LCD перед каждым выводом данных на экран.
Пока - нет кракозябров, полет нормальный
(что еще раз говорит в пользу программной природы глюков, а именно - RTClock портит I2C).
Вот ссылка на уже неглючащий тест и две библиотеки. https://disk.yandex.ru/d/XfLpvhMsA3VOJA
RTClock вообще уже содержится в ардуине-для-stm32, а LiquidCrystal_I2C нужно установить. Можно просто в папку скопировать к библиотекам, или в ту же, что и код.
Для наблюдения кракозябров нужно убрать строчку lcd.begin(...) в цикле loop. Там она вообще-то, при нормальной работе библиотек, совершенно не нужна.
Используете много внешних ресурсов. Дайте файлы libmaple.
(могу найти их, но я хочу создать вашу среду).
...
в rogerclarkmelbourne есть libmaple
..
место:
lcd.begin...
не в loop(), а в setup() - выполнение один раз.
libmaple дам, попозже. Какие именно? Они же тянут за собой довольно много по цепочке инклюдов...
Понятно что lcd.begin() не должно быть в loop. Я его специально поместил туда, это "костыль", patch, чтобы он каждый раз восстанавливал то, что портит RTClock. И Это получилось - в таком виде глюков нет. Это имеет важное диагностическое значение. А без lcd.begin() в loop - лезут кракозябры, т.е. неправильные символы.
чтобы он каждый раз восстанавливал то, что портит RTClock.
Интересно!
---
win10, Arduino v1.8.19 работает STM32_Arduino, но не могу перенастроить библиотеки. libmaple отсутствует.
В rogerclarkmelbourne есть RTClock и libmaple, но не компилируется. Пфу. Или все изменилось? Какую версию win и Arduino IDE используете?
Win XP. Arduino 1.8.6 в portable варианте. Да не связывайтест Вы с этой фигней ну или поставьте все как указано по первой ссылке - там весь комплект. Специально для желающих работать с arduino IDE + stm32 на минимальном софте.
Tак: под win7 x64, Arduino IDE v1.8.19, Arduino_STM32, модуль STM32F103C8T6 на 72 MHz и USB/TTL CP2102, PCF8574T (address 0x27, I2c SCL: PB6, SDA: PB7) + LCD1602 (все China), 5V на 7805, пластиковый breadboard и объемный монтаж, с проводами 15..20 cm, под комментарием: lcd.begin(..) и delay(500) в loop() все ОК, глюков нет.
... уже 15 минут - все ОК ...
... уже 30 минут - все ОК ...
... оставляю включенным на ночь ...
... уже 6 часов, часы идут неточно (+13 мин), но показания на дисплеее в норме
Старт, стоп, несколько раз, устройство работает, дисплей ОК .
А пришлите пожалуйста, Вашу RTClock. У меня она в Arduino\hardware\ArduinoSTM32\STM32F1\libraries\RTClock
Но может быть и в другом месте. Может быть и несколько. Нужна та, с которой проект компилируется. Я ее себе скопирую и проверю. Может быть тоже все работать будет нормально.
Попробуйте, пожалуйста, прошить его в свою blue pill. А также - пришлите мне свой bin, а я его прошью ST Link- ом в свой контроллер. И посмотрим, что получится.
Залил Ваш код. blue pill виснет - не выдает даже "controller is ok". А мой - выдает, но потом глюки с символами, как обычно. Перед заливкой все стирал.