Когда я делаю так: for (uint8_t i = 0; i < 8; i++) { buffer[i] = ((data >> i) & 1) * 0xFF; } HAL_UART_Transmit(instance->huart, buffer, 8, 1000); То все данные уходят, как надо, но средствами HAL нельзя прочитать из порта. Если же сделать так: HAL_UART_Transmit(instance->huart, (uint8_t*)(0xFF), 1, 1000); HAL_UART_Transmit(instance->huart, (uint8_t*)(0xFF), 1, 1000); HAL_UART_Transmit(instance->huart, (uint8_t*)(0xFF), 1, 1000); ... То 1-wire не работает, а логический анализатор пишет, что длина пакета слишклм мала.

Комментарии: 21

  1. Alexander

    А старт/стоп биты учитываются?

    • Aleksandr

      Вероятно, могут мешать. Но как от них избавиться?

      • Alexander

        Хз. А если ногой дергаешь по таймеру - onewire работает?

        • Aleksandr

          Оно работает, если передавать по байту. Но как читать? Это стоп биты...

          • Alexander

            TX с RX объединить.

            • Aleksandr

              Полный дуплекс, через диод?

              • Alexander

                Да, как вариант

                • Aleksandr

                  Люди без этого делают Но не на HAL

                  • Alexander

                    Еще можно в OpenDrain ногу настроить

                    • Aleksandr

                      Так она и так OD

                      • Alexander

                        Тогда датчик может просаживать ногу вниз и ее состояние можно мониторить по данным порта.

                        • Aleksandr

                          Так и делается. Но как прочитать данные порта, если он пишет целым байтом, а читать надо после каждого бита? Бит OW-шины - это байт USART-а

                          • Alexander

                            Так целый байт UART это один бит OW

                            • Aleksandr

                              Тогда стоп биты мешают

                              • Alexander

                                Отправляешь, ждешь немного, считываешь IDR порта.

                              • Alexander

                                Так вроде у OneWire байты длиной кодируются.

                                • Aleksandr

                                  Не получается так, во всяком случае, как с кодом, что я написал выше

          • Aleksandr

            По одному отправляю - стопы мешают

Не нашли ответ?

Вам также может быть интересно