STM32. Работаем с i2c. Блокирующая функция, работа с прерываниями. Часы MAX DS3231. Урок 11.

Поделиться
HTML-код
  • Опубликовано: 12 дек 2024

Комментарии • 24

  • @ajdarseidzade688
    @ajdarseidzade688 3 года назад +4

    Очень и очень крутое объяснение и обучающий урок (тьфу-тьфу не сглазить). Спокойный, нормальный голос и пояснения. Огромная благодарность Вам.

  • @sozdatelEd
    @sozdatelEd 2 года назад

    2:18 с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.

    • @openFrimeTv
      @openFrimeTv Год назад

      а емкость кондера зависела от номинала резистора?

  • @moviemaker_inc
    @moviemaker_inc 4 года назад +2

    Отличные обучающие уроки. Вот ещё бы по nrf24l01 уроки увидеть. В ардуино часто передача происходит по таким модулям

    • @Solderingironspb
      @Solderingironspb  4 года назад

      В будущем может рассмотрю его)

  • @diyarkhamzin205
    @diyarkhamzin205 Год назад +1

    Олег, спасибо за ваши уроки, прохожу каждый укров шаг за шагом. Все интересно и понятно! Но есть один вопрос: на 19:19 вы начинаете побитово считать секунды. Я не понял зачем вы туда 48 секунд побитово вбили? Что это дало? я понял,что первые 4 бита отвичают за секнды от 0-9 и 2ые 4 бита отвичают за минуты от 0 до 59, но почему вы туда 48 в битовом формате забили?

    • @diyarkhamzin205
      @diyarkhamzin205 Год назад +1

      Как я понял к нам приходит пакет данных с датчика времени в бинармном формате скажем 0100 1000,
      где первый 4 бита несут в себе 0,1,2,3,4,5, а вторые 4 бита 0-9 секунды.
      Соответственно вы умножаете на 10 первое значение и суммируете секунды со вторых 4 битов. Вроде просто, но пришлось "переспать" с этой мыслью, чтобы понять)

    • @Solderingironspb
      @Solderingironspb  Год назад

      @@diyarkhamzin205 совершенно верно)

  • @cybercube7915
    @cybercube7915 4 года назад +2

    Спасибо,хорошие примеры.Надеюсь когда нибудь увидеть примеры по работе с usb .Купленные в Китае и чипдипе ,есть разница?

    • @Solderingironspb
      @Solderingironspb  4 года назад

      По usb тоже будет. В будущем планирую по-фану рассмотреть протоколы от тех же джойстиков денди и сделать переходник на usb. На счет МК: как повезет) мой первый мк с китая был подделкой. Поэтому я и купил один мк в чип и дип, чтоб перепаять) я про него еще в уроке #00 говорил)

    • @Solderingironspb
      @Solderingironspb  3 года назад

      @Student Programmer да при любой работе с данными, будь то вывод текста или принятие чего-то в буфер, если помещать большее в меньшее, то все виснет.

    • @Solderingironspb
      @Solderingironspb  3 года назад

      Мне тоже интересно, если честно 😀поэтому я в ступоре тогда долго был. Я в своей группе в вк описывал эту проблему. Даже видео выкладывал туда. Там была куча догадок, но так и не пришли к общему решению.

    • @vasyivanov5724
      @vasyivanov5724 3 года назад

      Вместе с принтф вы скорее всего добавляли какую-нибудь строчную константу. Константа идет в секцию данных и компилятор с компоновщиком устраивают там немного другое распределение, в результате которого после вашего двухбайтного буфера не оказывается ничего критичного - штук 5 неиспользуемых байт вполне достаточно.

    • @Solderingironspb
      @Solderingironspb  3 года назад

      @@vasyivanov5724 вполне может быть) я уж, если честно, и не вспомню. Столько воды уже утекло с того времени))

  • @betet1352
    @betet1352 3 года назад

    Про радио RDA5807M было бы интересно посмотреть.

  • @intelektum
    @intelektum 3 года назад

    Апаратный глюк есть в 103 серии и только на определенном I2c уже не помню каком, лично нарывался на него, проще было взять другой I2c чем костылить проблемный.
    Ушел на 303 камни.

    • @Solderingironspb
      @Solderingironspb  3 года назад

      Я сейчас тоже закупил f3 серию, а именно stm32f302cbct6. Отличная замена f103, которого сейчас днем с огнем в магазинах не найдешь))

    • @intelektum
      @intelektum 3 года назад

      @@Solderingironspb И более фаршированные , правда с тем же I2C немного по другому работа идет и не только с ним, хотя в HAL наверное тоже самое, я просто пользую LL .

    • @Solderingironspb
      @Solderingironspb  3 года назад

      В HAL точно так же)

  • @namename2031
    @namename2031 Год назад

    С компьютера на DS321 отправляются данные актуальной даты и времени?
    А если STM32 не будет подключен к компьютеру?
    В ручном режиме как то можно поправить время и дату?
    При отключенном STM32 от компьютера.
    Как вообще регистры в DS321 работают?
    Может достаточно в эти регистры записать актуальные данные даты и времени?
    А инкрементация даты и времени в этих регистрах происходит автоматически?

    • @Solderingironspb
      @Solderingironspb  Год назад +1

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

    • @namename2031
      @namename2031 Год назад

      @@Solderingironspb
      С помощью функции HAL_I2C_Mem_Write я записал значение в регистр секунд, минут итп.
      Теперь непонятно что делает HAL_I2C_Master_Transmit
      Вы ведь не посылаете данные о времени на компьютере.
      Что записывается тогда в регистры при применении HAL_I2C_Master_Transmit?

    • @namename2031
      @namename2031 Год назад

      @@Solderingironspb
      Я написал такой же код как у вас, но получаю не дату и время из компьютера.
      HAL_I2C_Master_Transmit не служит для записи значения по адресу.
      Для записи значения по выбранному адресу служит функция HAL_I2C_Mem_Write.
      Идея вообще первоначально какая?
      Пишешь HAL_I2C_Master_Transmit с адресом 0х00 и заполняешь все регистры DS3231 автоматически?
      Отлично, но во первых вы этого не говорили, а во вторых не думаю, что это так происходит.
      Может вы каким то другим способом уже записывали точные значения даты и времени в DS3231 и эти значения каким то образом там хранились?

  • @Дмитрий_Алкогольевич

    Судя по отсутствию дизлайков - кря-тины (это такая порода гусей) сюда не заходят.