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

Sfort2

Members
  • Постов

    5
  • Зарегистрирован

  • Посещение

Электроника

  • Стаж в электронике
    1-2 года

Достижения Sfort2

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Получилось организовать передачу данных с использованием прерываний по фронтам. Скорость выросла. стабильность выросла. Работает просто отлично.
  2. Я согласен, поэтому смотрю в сторону CAN. Сначала я поставил цель найти какое-нибудь рабочее решение задачи с минимумом доп. микросхем. Цель достигнута, данные передаются сотнями байт без потерь, хотя мне необходимо передавать десятки байт в несколько минут. Пользоваться этим буду, но не в рабочих проектах. А в будущем, конечно CAN.
  3. Всё, эксперимент завершен. Связь по одному UART с 5 разными устройствами, которые опрашиваются по очереди осуществил, испоьзуя один UART, подключенный к двум GPIO (этого же МК), на который дублировал сигналы от других GPIO (этого же МК), подключенных к UART подключаемых устройств. Схематично выглядит так: Безымянные устройства подключаются своими UARTами к пинам ведущего камушка: устройство_a_Тх к a_in; устройство_a_Rх к a_out; устройство_b_Тх к b_in; устройство_b_Rх к b_out; устройство_c_Тх к c_in; устройство_c_Rх к c_out; устройство_d_Тх к d_in; устройство_d_Rх кd_out; устройство_e_Тх к e_in; устройство_e_Rх к e_out. В ведущем камушке проводками: comm_in подключен к USART3_TX; comm_out подключен к USART3_RX. Если хотим пообщаться с устройством b, то в бесконечном цикле, то: if(HAL_GPIO_ReadPin(b_in_GPIO_Port, b_in_Pin) == GPIO_PIN_SET) HAL_GPIO_WritePin(comm_out_GPIO_Port, comm_out_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(comm_out_GPIO_Port, comm_out_Pin, GPIO_PIN_RESET); if(HAL_GPIO_ReadPin(comm_in_GPIO_Port, comm_in_Pin) == GPIO_PIN_SET) HAL_GPIO_WritePin(b_out_GPIO_Port, b_out_Pin, GPIO_PIN_SET); else HAL_GPIO_WritePin(b_out_GPIO_Port, b_out_Pin, GPIO_PIN_RESET); UART3 используем с DMA и, естественно, с прерываниями. При тактировании камушка 8МГц, скорость передачи не более 9600к. При большей скорости время обработки прерывания больше, чем передача 1 бита, и получаются множественные ошибки. А CAN все-таки иногда буду использовать, понравился он. Спасибо.
  4. А зачем адресация? Не нужна она. Проводками соединяем: UART RX ---> GPIO1, UART TX --->GPIO2, UART RX устройства n --->GPIO3, UART TX устройства n --->GPIO4. Если хочу подключиться к устройству n по UART, пишу GPIO1 = GPIO4; GPIO3 = GPIO2; Включаю UARTы и все должно работать. Или что-то не получится? Например, может порты GPIO не будут успевать передавать, но ведь UART работает с DMA и он независим.
×
×
  • Создать...