Jump to content
Ivan Rusev

stm32f4 DS3231+LCD I2C

Recommended Posts

Можно ли на одно шине I2C подключать модуль часов реального времени ds3231 и LCD через модульI2C.У меня не получается почему?

Share this post


Link to post
Share on other sites
10 минут назад, Ivan Rusev сказал:

Можно ли ....

Можно.

10 минут назад, Ivan Rusev сказал:

У меня не получается почему?

А кто ж это знает, кроме Вас ? :blink:

Share this post


Link to post
Share on other sites

Вебинар «Экосистема MEAN WELL. Решения для любых задач электропитания» (20.05.2021)

Приглашаем 20 мая на вебинар, посвященный линейке поставок компании MEAN WELL и ее подходу к производству источников питания — как экосистемы продукции и услуг, которая позволяет подобрать оптимальный источник питания для любых задач электропитания. Рассмотрим весь спектр выпускаемой продукции MEAN WELL в области AC/DC-, DC/DC- и DC/AC-преобразователей с подробным разбором интересных и уникальных новинок, их применении и многое другое.

Подробнее

Что конкретно делаете, и какие результаты не устраивают ? Подробнее опишите.
На вопрос "Как реализовать ?" есть 1000 и 1 ответ.

Share this post


Link to post
Share on other sites

Барьерные силовые клеммы от Degson – расширение складского ассортимента Компэл

Обновленная линейка барьерных клеммных блоков Degson, поступивших на склад Компэл, содержит широкий ряд клемм, подходящих для соединения проводников различного сечения (от 22AWG до 10AWG). Барьерные клеммные колодки сочетают в себе удобство, простоту и надежность соединения. Это достигается за счет ответственного производства и использования высококачественных материалов. Винтовые клеммные блоки барьерного типа Degson предназначены в первую очередь для коммутации в сильноточных цепях, например, в распределительных и измерительных системах.

Подробнее

Почитать как осуществляется обмен даннымии на шине i2c и реализовать.

Share this post


Link to post
Share on other sites

Материалы вебинара «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок»

Опубликованы материалы вебинара, посвященного решениям Analog Devices для гальванической изоляции. На вебинаре рассказали о: технологии гальванической изоляции iCoupler, цифровых изоляторах, технологии isoPower, гальванически изолированных интерфейсах (RS-485, CAN, USB, I2C, LVDS) и многом другом. Материалы вебинара будут интересны разработчикам промышленной автоматики и медицинской техники.

Подробнее

Ванговать, можно на многое, от неправильного адреса устройства, до... контакта в соединении. Тут бы хоть схему подключения минимальную, часть кода ( хотя бы в части касающийся) и результат при определенном варианте. Это минимум

Share this post


Link to post
Share on other sites

На STM  LCD ничего не показывает.Перебрасываю LCD на другую шину I2C всё хорошо.

6 часов назад, elki сказал:

Почитать как осуществляется обмен даннымии на шине i2c и реализовать.

Всё прочитано.И реализовано.Правда на разных шинах.

Share this post


Link to post
Share on other sites

Если Вы хотите, чтобы Вам просто посочувствовали, то пожалуйста - сочувствую...

Share this post


Link to post
Share on other sites
4 часа назад, Ivan Rusev сказал:

Всё прочитано.

Тогда вопрос. Сколько устройств можно повесить на одну шину?

Share this post


Link to post
Share on other sites

Ну наверное 10.Но прикол снять информацию с этой же шины и  вывести на lCD не удаётся по практике Можете хоть 1000 минусов мне ставить .Почему не удаётся?.Я попытаюсь На AVR это сделать.

Какие нарушения у меня.Какой то бред.Форум для кого создан.Для посиделок.Вобщем ну вас .....

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Только что, elki сказал:

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

Спасибо.

Share this post


Link to post
Share on other sites

Код случаем не калокубом сгенерирован? Если да, то сочувствую...

Share this post


Link to post
Share on other sites
1 час назад, Ivan Rusev сказал:

Форум для кого создан.

Тогда Вы форумом ошиблись. Тут гадалки и экстрасенсы не тусят.
Невозможно Вам помочь по фразе "У меня не работает".

Share this post


Link to post
Share on other sites
1 час назад, Eddy_Em сказал:

Код случаем не калокубом сгенерирован? Если да, то сочувствую...

Нет настройка вручную.По регистрам.Но вы мне подсказали.Проблема в коде LCD скорее всего.

Share this post


Link to post
Share on other sites

Т.е., как это полагается у ардуинщиков, из разных источников был надерган непонятный непроверенный код, слеплен в кучу, а потом появились вопросы? Ну-ну…

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

Share this post


Link to post
Share on other sites

я не ардуинщик.Просто  амматор.Вот код .

stm32f407ve adc.7z

Не всегда то что работат в avr то будет работать в stm32

Вернее ещё он будет работать .Но не так.

Share this post


Link to post
Share on other sites
Posted (edited)

Какая жуткая реализация DHT22! Ну есть же таймер, есть АЦП, зачем делать блокирующие операции? Мой пример.

Еще одна жесть — в main: 12 одинаковых массивов bufN[50] - почему не сделать двумерный массив или одномерный buf[N*50]? Все вот эти uint8_t bm[] и т.п. нужно объявлять как static const, иначе они будут занимать место в оперативке, а не сидеть только во флеше. Да и здесь тоже правильней было бы сделать один длинный массив. Объявление переменных транслитерацией русского (pauza и т.п.) — некомильфо, как и комментарии не на английском языке. Структура кода ужасная: нет общего стиля написания, читать нереально сложно. Поток копипасты вроде 100500 LCD_SendChar еще раз свидетельствуют об ардуиноподходе — почему бы не объявить функцию, которая будет печатать строки? Еще и sprintf на МК… Жуть в полоску!!! 100500 if(menu == x) надо было одним селектом заменить, а чтобы код легче читать, не городить простыню, а разбить внутренности на отдельные static inline функции. Если одна функция расползается на кучу экранов, это значит, что что-то в ней явно не так!

Инициализация LCD сделана через одно место! Опять абдуриноподход… Ну неужели сложно засунуть все эти магические числа в массив (да и вместо магических чисел нужны макросы, чтобы не мучить себя в будущем воспоминанием, зачем же эта тройка или пятерка передается). Во второй массив загнать величину пауз при инициализации. В этом случае все будет красиво: в цикле отправляем нужное, а если требуется пауза - выдерживаем ее.

В инициализации I2C: лишний раз напомню, что регистры МК волатильны! Т.е. компилятор не будет оптимизировать 100500 записей подряд вида REGx &= a; REGx |= b; в одну, а так и будет тратить флеш и такты ядра на эту чепуху! Так что правильно писать один раз: REGx = (REGx & ~clearflags) | (setflags);

 

2021.03.10_09:53:04.png

Edited by Eddy_Em
Добавил страшную картинку

Share this post


Link to post
Share on other sites

это не моя Библиотека.Я только настроил шини I2C.И запустил DS3231

Share this post


Link to post
Share on other sites
8 часов назад, Eddy_Em сказал:

Какая жуткая реализация DHT22! Ну есть же таймер, есть АЦП, зачем делать блокирующие операции? Мой пример.

Еще одна жесть — в main: 12 одинаковых массивов bufN[50] - почему не сделать двумерный массив или одномерный buf[N*50]? Все вот эти uint8_t bm[] и т.п. нужно объявлять как static const, иначе они будут занимать место в оперативке, а не сидеть только во флеше. Да и здесь тоже правильней было бы сделать один длинный массив. Объявление переменных транслитерацией русского (pauza и т.п.) — некомильфо, как и комментарии не на английском языке. Структура кода ужасная: нет общего стиля написания, читать нереально сложно. Поток копипасты вроде 100500 LCD_SendChar еще раз свидетельствуют об ардуиноподходе — почему бы не объявить функцию, которая будет печатать строки? Еще и sprintf на МК… Жуть в полоску!!! 100500 if(menu == x) надо было одним селектом заменить, а чтобы код легче читать, не городить простыню, а разбить внутренности на отдельные static inline функции. Если одна функция расползается на кучу экранов, это значит, что что-то в ней явно не так!

Инициализация LCD сделана через одно место! Опять абдуриноподход… Ну неужели сложно засунуть все эти магические числа в массив (да и вместо магических чисел нужны макросы, чтобы не мучить себя в будущем воспоминанием, зачем же эта тройка или пятерка передается). Во второй массив загнать величину пауз при инициализации. В этом случае все будет красиво: в цикле отправляем нужное, а если требуется пауза - выдерживаем ее.

В инициализации I2C: лишний раз напомню, что регистры МК волатильны! Т.е. компилятор не будет оптимизировать 100500 записей подряд вида REGx &= a; REGx |= b; в одну, а так и будет тратить флеш и такты ядра на эту чепуху! Так что правильно писать один раз: REGx = (REGx & ~clearflags) | (setflags);

 

2021.03.10_09:53:04.png

А вообще спасибо  вам что вы посоветовали пересмотреть.DHT22 И переписать чужую библиотеку.Я ничего против Ардуино не имею .Правда мне многое там не понятно и запутано.

Share this post


Link to post
Share on other sites
8 часов назад, Eddy_Em сказал:

Какая жуткая реализация DHT22! Ну есть же таймер, есть АЦП, зачем делать блокирующие операции? Мой пример.

Он же написал, что он "аматор", что бы это ни значило)))) что вы ему пишете, думаете он соображает?

Каждый раз с ТС-а удивляюсь. Вот явно это не его. Зачем мучается? 
На его месте нормальные люди уже давно софтварно обошли бы, если сроки горят. Или взяли бы почитали референс, подключили логический анализатор и разобрались, кто кому жить мешает.
Нет, он каждый раз упорно пытается делать то, что не понимает, берет чужие либы, не читая их, пытается запустить.

Если я не разбираюсь в работе ДВС - я не лезу. Зарабатываю денег на том что умею, а потом плачу специалисту, если машина у меня не едет.

Share this post


Link to post
Share on other sites

Похоже, человек пытается стать радиолюбителем. Правда, начал с совершенно неправильных вещей. С таким подходом ничего хорошего не получится. Так рождаются разве что абдуринщики: код писать не умеет, об оптимизации вообще ничего не слыхал, даташиты с RM читать не умеет, логанализатор не знает…

Share this post


Link to post
Share on other sites
53 минуты назад, LiVit сказал:

Он же написал, что он "аматор", что бы это ни значило)))) что вы ему пишете, думаете он соображает?

Каждый раз с ТС-а удивляюсь. Вот явно это не его. Зачем мучается? 
На его месте нормальные люди уже давно софтварно обошли бы, если сроки горят. Или взяли бы почитали референс, подключили логический анализатор и разобрались, кто кому жить мешает.
Нет, он каждый раз упорно пытается делать то, что не понимает, берет чужие либы, не читая их, пытается запустить.

Если я не разбираюсь в работе ДВС - я не лезу. Зарабатываю денег на том что умею, а потом плачу специалисту, если машина у меня не едет.

ну у меня нет 20 летнего стажа.Как у вас.Вы же спецы.Что такое оптимизация я знаю.По по воду кода ничего не могу сказать.Есть люди знающие вроде вас .Ноя иногда читаю на форумах ваши заумные коды которые вы мне предлагаете.Нут например один товарищь  или господин .Показал  мне как он реализовал тактирование контроллера.Он запустил и внутреннюю частроту.И кварц.Я ведь не до такой степени идиот.Это камень в ваш огород.Тот кто здесь высиживает золотые яйца.Свои или чужие.Выдавая их за свои.Я пишу по простому.Может правильно.А может нет.Но оно работает.Да я пользуюсь чужими библиотеками.Иногда  корректирую и дописываю своё что то.Я не программист.А эксперементатор.RM  не раз читал.Таймера АЦП I2C .Но вс

46 минут назад, Eddy_Em сказал:

Похоже, человек пытается стать радиолюбителем. Правда, начал с совершенно неправильных вещей. С таким подходом ничего хорошего не получится. Так рождаются разве что абдуринщики: код писать не умеет, об оптимизации вообще ничего не слыхал, даташиты с RM читать не умеет, логанализатор не знает…

Как же вы с таким стажем можете быть стареньким?Я радиолюбитель.С контролерами начал с нуля.Абсолютний ноль .Я ни кем ни пытаюсь стать.Вами точьно не стану.У меня нет такой цели.Так как спецы такие как вы.Отечеству не нужны.Нашему Отечеству нужны бараны.Но я преследую конкретные цели.И хочу их реализовать.

Share this post


Link to post
Share on other sites
1 час назад, LiVit сказал:

Он же написал, что он "аматор", что бы это ни значило)))) что вы ему пишете, думаете он соображает?

Каждый раз с ТС-а удивляюсь. Вот явно это не его. Зачем мучается? 
На его месте нормальные люди уже давно софтварно обошли бы, если сроки горят. Или взяли бы почитали референс, подключили логический анализатор и разобрались, кто кому жить мешает.
Нет, он каждый раз упорно пытается делать то, что не понимает, берет чужие либы, не читая их, пытается запустить.

Если я не разбираюсь в работе ДВС - я не лезу. Зарабатываю денег на том что умею, а потом плачу специалисту, если машина у меня не едет.

Значит я ненормальный амматор.Кое что соображаю.Упорство и наглость второе счастье.Не всегда беру чужое. А вы атомную бобу пытались сделать в домашних условиях.?А что вы умеете? Писать программы? Или ставить плюсы  или минусы?Я не спец.На форумах не часто сижу.Не боги обжигают горшки.Ваши боги.А у меня один Аллах.

Share this post


Link to post
Share on other sites

@Ivan Rusev , Вам ещё научиться вопросы задавать, чтобы Вас понимали - было бы огромным плюсом.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Правила форума перечитайте, пожалуйста. Конкретно об обсуждении действий модераторов. Это во - вторых. А во - первых - модератором этого раздела я не являюсь. Не устраивает что то в теме - пишите жалобу.
    • К примеру вот такой околокомпьютерный малыш. Работает и на АС и на наушники. В последствии от кожухов отказался, делаю без них. Вполне возможно сделать по симпатичней, видимо не хватает фантазии.
    • актуальный список ( 12.05) :   КА1001АП1 12шт 12 руб/шт КА1001ИК1 11 шт 12 руб/шт Кр1005ВЕ1 15шт 10руб/шт К101КТ1Б 5 шт 80 руб/шт К118УН1,б,г 20 шт 10руб/шт К118УН2б 10шт 10руб/шт К118УН1Д 12шт 15руб/шт 125НТ1 6шт 90руб/шт К133ИД3 (жел) 3шт 90руб/шт 140УД1А,Б 7 шт 90руб/шт К140УД2А 6шт 90руб/шт К140УД5А 12 шт 90руб/шт КР140УД20А 16шт 12руб/шт Кр142ЕН5А,Б 50шт 14руб/шт Кр142ЕН8Б,В,Г 40шт 14руб/шт К155ИД1 11шт 40руб/шт К155ИД3 9шт 20руб/шт 155ИД4 6шт 8 руб/шт КМ155КП2 30шт 5 руб/шт К155РЕ3 20шт 20руб/шт К155ТВ1 40шт 5 руб/шт К237УН2,ХА1,ХА6, по 5 шт х 15руб/шт к2жа372 5 шт х 15руб/шт К252ПН1 12шт х 25руб/шт К264ГФ1 22 шт 15руб/шт Н530ИЕ17 2шт 90руб/шт КС531ЛИ1 40шт 3 руб/шт Кр537РУ2 3 шт 20руб/шт Кр541РУ2 5шт 10руб/шт К555ИД7 8шт 10руб/шт КМ555ИД6 45 шт 10 руб/шт Кр556РТ5 7шт 20руб/шт К561ЛП2 30шт 4,5 руб/шт К561ПУ4 50 4,5 руб/шт Кр565РУ1(4шт),РУ2В(5шт),РУ6Г(3шт) по 20руб/шт Кр573РФ5 8шт 30руб/шт Кр580ВВ51 18шт 18 руб/шт Кр580ВГ75 40шт 16руб/шт Кр580ВК28 25шт 18руб/шт Кр580ВК38 25шт 18руб/шт Кр580ВТ57 20шт 12руб/шт К589ИК01 25 шт1 8руб/шт Кр590КН8Б 19 шт 16руб/шт КР1157ЕН501 15 шт 6руб/шт Кр1021ХА4 8шт 11 руб/шт КР1043ХА2 23шт 15руб/шт КР1401УД1 14шт 22руб/шт КР1407УД1 3шт 22руб/шт 1508ПЛ1 13 шт 80 руб/шт Кр1601РР1 30шт 8руб/шт Кр1814ВЕ5 5шт 12руб/шт Кр1804ВН1 11шт 18руб/шт К04УК011 12шт 40руб/шт КТ117А 25шт 45руб/шт КТ117Г 6шт 50руб/шт КТ203А(ж) 9шт 45руб/шт КП103Е,Л,К(ж) 27шт 50руб/шт 2П301Б(ж) 7шт 50руб/шт КП302ВМ(ж) 15шт 65руб/шт КП303В,Д,Е,Ж(ж)  40шт 45руб/шт КТ313А1 15шт 8 руб/шт КТ313Б(ж) 10шт 45руб/шт 2Т321А 23 шт  23руб/шт КТ326Б (ж)9шт 40руб/шт КТ3102Б,Г (ж)20шт 40руб/шт КТ3107Б 50 шт х 2руб/шт КТ3107В 50 шт х 2руб/шт КТ3129Д9 500 шт х 4руб/шт КТ3151А9 50 шт х 6руб/шт КТ342Б,В(ж) 25шт х 40руб/шт КТ350А(ж) 45 шт х 6руб/ш КТ501В(ж) 18шт х 40руб/шт КТ601АМ 50шт 8руб/шт КТ602А,Б 9шт 60руб/шт КТ603Б(ж) 7шт 70руб/шт КТ605Б(ж) 4шт 70руб/шт КТ605АМ 20 шт 1,5 руб/шт КТ610А 1 шт 130руб/шт КТ625АМ2 200шт 8 руб/шт КТ639А 7 шт 10руб/шт КТ698А 7 шт 20руб/шт КТ805А,Б (железо) 22шт 38руб/шт КТ805АМ,ВМ(пл) 50 шт 15руб/шт КТ807А 90 шт 15 руб/шт КТ807А,Б 43шт 15руб/шт КТ814Б 15шт 12руб/шт КТ815Б,Г 20шт 12 руб/шт  КТ816В,Г 20шт 12 руб/шт  КТ817В,Г 20шт 14 руб/шт  КТ818А,Б,В(пластм.) 50шт 10руб/шт КТ818ВМ,(железо) 40шт 38руб/шт КТ818Б(пл.) 50 шт 8руб/шт КТ818БМ(ж) 20 шт 38 руб/шт КТ818ВМ(ж) 40 шт 38 руб/шт КТ819БМ(ж) 2 шт 38 руб/шт КТ819Б(пл) 50 шт 20руб/шт КТ819В(пл) 50 шт 20руб/шт КТ819Г(пл) 20 шт 25руб/шт КТ825Г (ж) 3 шт 45 руб/шт КТ828А(ж) 4 шт 38 руб/шт КТ828Б (ж) (6шт)-38 руб/шт КТ829А (30 шт),КТ829Г (50 шт) 16 руб/шт КТ837Т 10шт 20руб/шт 2Т837Б 8 шт 38 руб/шт КТ838А(ж) 5 шт 36 руб/шт КТ840Б 4 шт 26 руб/шт КТ845А(ж) 2 шт 38 руб/шт КТ863А 20 шт 15руб/шт КТ902А 22 шт 22 руб/шт КТ903б(железо) 34шт 26руб/шт КП904А 1 шт 300 руб/шт 2Т926А 1 шт 100 руб/шт КТ935А 1 шт 56 руб/шт 2Т936А 1 шт МП105 17шт 5руб/шт МП106 80шт 5руб/шт МП114 25шт 5руб/шт П304М 12 шт 15руб/шт П308(белые) 10шт 60руб/шт П701 25 шт 15руб/шт П702А(ж) 4 шт 16 руб/шт КТ728/800 тесла тиристор 2шт 100руб/шт Т10-25 б/у 4 шт 32руб/шт Т142-80-(4-6) 2 шт 64 руб/шт ТС112-16-8 1 шт 50 руб/шт АОД101Б 20шт 18руб/шт 3ОД101Б 50шт 18руб/шт АОД109Г 40 шт 30руб/шт Отправка за Ваш счёт Почтой России, заказ от 500р. Отправка будет из Новгородской области. В общую сумму входит покупка деталей из других моих тем.  
    • А нельзя просто тупо поставить резистор на входе большего номинала? Уплывут режимы? Видел схемы с похожим дифкаскадом на входе, есть варианты с ним 30кОм и даже 68к      
    • Чувствую, тема просится в Корзину...
    • а без этого никак. вот к примеру скрин с форума  отечественной онлайн игры. при каждом обновлении игры требуется обновление драйверов видеокарты, ибо игровые обновления делаются и тестируются исключительно на самых свежих драйверах, на более старых версиях нет никакой гарантии корректной работы игрового клиента, таким образом разработчики убивают двух зайцев - экономят человеческие ресурсы и частично отсекают владельцев устаревших видеокарт, на которые обновления уже не выходят, ибо раз у человека устаревшее железо, то вероятнее всего у него нет денег на новое, а раз нет денег на новое, железо, значит вероятность того, что игрок занесёт денежку, купив какой-нибудь премиум набор стремится к нулю. И при запуске игры на старых драйверах люди частенько сталкиваются с графическими артефактами, вылетами или плохой производительностью. та же ерунда происходит и в различных видеоредакторах и пр. неприятно, когда установил обнову давинчи, которая добавляет новые приятные фичи и получил заторможенную работу, да ошибки при рендере. Короче говоря если человек пльзуется пк на 775 сокете на седьмой винде и использует его, чтоб смотреть фильмецы с торрента под пивас, то обновляться не нужно, если человек играет игры или занимается графикой, то иметь актуальные драйвера это необходимость. 
    • На плате в наличии свободные места, как будто бы предназначенные под другие элементы... Оно в минусе регулирует,  8205S - возможно, сборка mosfet. battery protection - максимальный ток 4А, постоянки, один транзистор, там два параллельно... Должно хватать. Пробовать уменьшить нагрузку по току? Карта напряжений - измеряется напряжение между назначенными на контрольные точками и минусом платы
  • Similar Content

    • By Ivan Rusev
      Меня интересует какие флаги в преривании устанавливать по ДМА ?Кусок кода можно?
    • By Ivan Rusev
      Меня интересует вот что .Я пытаюсь передать данные через терминал .А у меня он выводит не  текст а кието 0 и козябрики .Почему?
      main.c
    • By Любовь Бертулите
      Компания производитель вендинговых автоматов для розлива питьевой воды в поисках инженера-системотехника/инженера электронщика.
      График 5/2 с 9 до 18, здесь удаленный формат не рассматриваем.
      Место работы – г. Екатеринбург.
      Мы ищем специалиста, который будет делать прототипы нового для контроллера, курировать производство, проверять, дорабатывать, перепаивать, а также:
      Переписывать текущие программы на С++; Создавать программу для Android для конфигурации параметров контроллера через bluetooth. (т.е. предлагать новые, современные идеи и подходы для развития имеющихся контроллеров, которыми вы владеете); Предлагать новые программные продукты, среды разработки. Будет в тренде мира микроэлектроники, китайского контрактного производства. Может предложить совершенно новую реализацию наших текущих задач, чтобы это было лучше и эффективнее. В идеале, нам нужен специалист, который имеет:
      Опыт программирования микроконтроллеров Atmega, STM32, ESP32; Опыт работы в Altium Designer; Опыт работы в c++ (IAR, QT); Опыт работы с modbus, rs485/232, SPI. Готовы рассматривать специалистов с разным опытом, поэтому пишите, задавайте вопросы.
      Резюме можно отправить на почту lb@ktekt.ru (да, мы кадровое агентство), позвонить можно по следующему тел. 89068001212 - Любовь. 
       
    • By Ivan Rusev
      Уже не один день  сижу думаю как  запустить stm32  с eeprom для сохранения данных.И в кубе такая же история.Записую функцию чтения в майн и контролер  садится ничего не работает ? В чём дело ? Сталкивались с таким чудом.Записывал без функции тоже самое одна сторока  его убивает.
      #include"main.h"
      #define I2C_REQUEST_WRITE                       0x00//0
      #define I2C_REQUEST_READ                        0x01
      #define EEPROM_ADDRESS                   0b1010000
      #define I2C_OWNADDRESS1_7BIT             0x00004000U
      void i2c1_AF_init(void)
      {
        GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL7_0;
        GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL7_1;
        GPIOB->AFR[0]|=GPIO_AFRL_AFSEL7_2    ;
        GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL7_3;
        GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL6_0;
        GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL6_1;
        GPIOB->AFR[0]|=GPIO_AFRL_AFSEL6_2;
        GPIOB->AFR[0]&=~GPIO_AFRL_AFSEL6_3;
      }
      void i2c1_init(void)
      {
          GPIOB->MODER|=GPIO_MODER_MODE7_1;
          GPIOB->MODER&=~GPIO_MODER_MODE7_0;
          GPIOB->OTYPER|=GPIO_OTYPER_OT7;
          GPIOB->MODER|=GPIO_MODER_MODE6_1;
          GPIOB->MODER&=~GPIO_MODER_MODE6_0;
          GPIOB->OTYPER|=GPIO_OTYPER_OT6;
          RCC->APB1ENR|=RCC_APB1ENR_I2C1EN;
          I2C1->CR2&=~I2C_CR2_FREQ_2  ;
          I2C1->TRISE=9;
          I2C1->CCR&=~I2C_CCR_FS;
          //I2C1->OAR1|=I2C_OAR1_ADD0 | I2C_OAR1_ADD1_7 | I2C_OAR1_ADD8_9 | I2C_OAR1_ADDMODE;
           I2C1->OAR1|= I2C_OWNADDRESS1_7BIT;
          //I2C1->CR1|=I2C_CR1_SMBUS | I2C_CR1_SMBTYPE | I2C_CR1_ENARP;

          I2C1->CR1|=I2C_CR1_ACK;
          I2C1->OAR2|=I2C_OAR2_ADD2;
          I2C1->CR1|=I2C_CR1_PE;
      }
      void I2C1_SendByteByADDR1(uint16_t adres,uint8_t  data)
      {
          //uint8_t data2;
          I2C1->CR1|=I2C_CR1_ACK;
          I2C1->CR1|=I2C_CR1_START;
            while(!(I2C1->SR1&I2C_SR1_SB))
            {
            }
          (void) I2C1->SR1;
          I2C1->DR|=  EEPROM_ADDRESS |I2C_REQUEST_WRITE;
          //I2C1->DR|= addr | I2C_REQUEST_WRITE;//
           while (!(I2C1->SR1& I2C_SR1_ADDR))
           {
           }
           (void) I2C1->SR1;
           (void) I2C1->SR2;
           I2C1->DR|=(uint8_t)adres;//
           while (!(I2C1->SR1& I2C_SR1_TXE))
           {
           }
           I2C1->DR|=(uint8_t) (adres>>8) ;//
           while (!(I2C1->SR1 & I2C_SR1_TXE))
           {
           }
           I2C1->DR|=data;
           while (!(I2C1->SR1 & I2C_SR1_BTF))
           {
           }
           I2C1->CR1|=I2C_CR1_STOP;
      }
      void I2C1_readByteByADDR1(uint16_t adres,uint8_t data)
      {
          //uint8_t data2;
          //uint8_t data1;
          I2C1->CR1|=I2C_CR1_ACK;
            I2C1->CR1|= I2C_CR1_START;
            while (!(I2C1->SR1& I2C_SR1_SB)){}
            (void) I2C1->SR1;
            I2C1->DR|=  EEPROM_ADDRESS |I2C_REQUEST_WRITE;
           // I2C1->DR|= SLAVE_OWN_ADDRESS | I2C_REQUEST_WRITE;
            while (!(I2C1->SR1& I2C_SR1_ADDR)){}
            (void) I2C1->SR1;
            (void) I2C1->SR2;
            //Transmit Address begin EEPROM
            I2C1->DR|=  (uint8_t) adres;
           while (!(I2C1->SR1& I2C_SR1_TXE)){}
           I2C1->DR|=(uint8_t) (adres>>8);
            while (!(I2C1->SR1& I2C_SR1_TXE)){}
            I2C1->CR1 |= I2C_CR1_START;
             while (!(I2C1->SR1 & I2C_SR1_SB)){}
             (void) I2C1->SR1;
             I2C1->DR = EEPROM_ADDRESS|I2C_REQUEST_READ;
             while (!(I2C1->SR1 & I2C_SR1_ADDR)){}
              (void) I2C1->SR1;
              (void) I2C1->SR2;
              I2C1->CR1 &= ~I2C_CR1_ACK;
                      while (!(I2C1->SR1 & I2C_SR1_RXNE)){}

                       data= I2C1->DR;
                  //    while (!(I2C1->SR1 & I2C_SR1_RXNE)){}
                       //data2 =I2C1->DR;
                    I2C1->CR1 |= I2C_CR1_STOP;
                  //   return data;
                  //    Delay(5);
      }
      void i2c2_AF_init(void)
      {
          GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL10_0;
            GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL10_1;
            GPIOB->AFR[1]|=GPIO_AFRH_AFSEL10_2    ;
            GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL10_3;
            GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL11_0;
            GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL11_1;
            GPIOB->AFR[1]|=GPIO_AFRH_AFSEL11_2;
            GPIOB->AFR[1]&=~GPIO_AFRH_AFSEL11_3;
      }
      void i2c2_init(void)
      {
          GPIOB->MODER|=GPIO_MODER_MODE10_1;
              GPIOB->MODER&=~GPIO_MODER_MODE10_0;
              GPIOB->OTYPER|=GPIO_OTYPER_OT10;
              GPIOB->MODER|=GPIO_MODER_MODE11_1;
              GPIOB->MODER&=~GPIO_MODER_MODE11_0;
              GPIOB->OTYPER|=GPIO_OTYPER_OT11;
              //RCC->APB1ENR|=RCC_APB1ENR_I2C2EN;
      }
       
       
      вот на  этой строчке
    • By BonTens86
      Доброго времени суток господа!) Вопрос к знатокам, начал изучать С++, писать начал на PIC16F628A, по мере изучения столкнулся с несколькими проблемами, первая это нужна помощь с подключением тактовой кнопки к PIC, суть проблемы в том, что при нажатии кнопки светодиод загорается, если нажать еще раз, то ничего не происходит.... Вопрос в том, как сделать выключение на эту же кнопку???? 
      unsigned char CheckButton(void) { unsigned char result=0; unsigned int butcount=0; while(!RB2) { if(butcount < 10000) { butcount++; } else { result = 1; break; } } return result; } void kkk2 (void) { if(CheckButton ()) { RB3 = 1; { //__delay_ms(100); } return; } }  
×
×
  • Create New...