Не получается принять данные через IrDA (STM32)
я пытаюсь организовать связь между двумя устройствами на базе STM32 с помощью инфракрасного света. Первое устройство, это официальная отладочная плата STM32L0538-DISCO, вторая китайская мини плата на базе STM32F103C8T6, их еще называют BluePill. Я решил, что мне хорошо подойдет IrDA протокол, тем более у STM32 есть его поддержка. Я использую передатчики на TFDU6102, по схеме которая дана в datasheet как рекомендованная (сделал две маленькие печатные платки/два модуля).
На данный момент я хочу просто сделать петлю, чтоб отправить данные с одного устройства, на другое, и чтоб второе получило эти данные и вернула обратно первому. Я перепробовал разные варианты конфигурации, разные скорости и режимы работы UART, но это так и не заработало. Тогда я купил IrDA устройство готовое - IRMate 210, чтобы упростить задачу, чтоб у меня было одно устройство которое точно IrDA поддерживает (на самом деле с этим тоже не просто, но вроде как мне удалось с ним работать на прямую через COM терминал на скорости 9600 бит, как менять скорость и другие параметры я не понял).
Начав работать с STM32L0538-DISCO у меня почти сразу получилось отправлять и получать данные на компьютере. Но повторить тоже самое на BluePill у меня не получается до сих пор. Если я отправляю данные, то на компьютере я могу их принять, ни каких ошибок, строка может по 100 раз прийти без единой ошибки:
HAL_IRDA_Transmit(&hirda2, (uint8_t *)"Hello, world!\r\n", 15U, 250U);
А вот с получением данных проблема, это я вызываю перед основным циклом while:
HAL_IRDA_Receive_IT(&hirda2, receiveBuffer, 1U);
И еще у меня есть метод для обработки прерывания:
/* USER CODE BEGIN 4 */
void HAL_IRDA_RxCpltCallback(IRDA_HandleTypeDef *hirda)
{
uint8_t recivedByte = receiveBuffer[0];
receiveBuffer[0] = 0;
//IrdaNetwork_ReciveByte(recivedByte, 0U);
HAL_IRDA_Receive_IT(&hirda2, receiveBuffer, 1U);
}
/* USER CODE END 4 */
Выкладываю голый проект CubeIDE, где просто пытаюсь прочитать побайтно IrDA - BluePill_2
Прошу дать наводку, что я делаю не так или на что стоит обратить внимание/почитать.
p.s. Что я уже проверил:
- Модули на TFDU6102 рабочие, если подключить каждый к STM32L0538-DISCO то они работают правильно. И на чтение и на запись.
- Чтение байтов, не через прерывания на BluePill так же не дают результатов.
- Само прерывание на чтение на BluePill вроде как работает, если светить пультом (у меня от вентилятора напольного), то иногда бывает, что он что-то прочитает, какой-то случайный байт. Я понимаю что пульт, это не IrDA, но просто как зацепка.
- Заметил еще кое что, если отключить линии TX и RX, чтоб они просто висели в воздухе, то прерывание вызывается, если я использую в цикле HAL_IRDA_Transmit.