Господа спецы, кто irDA на STM32 настраивал? Суть проблемы. Два устройства на STM32f100 с аппаратным ИК интерфейсом на ОУ и ключах. На стадии отладки одно пока только передает, второе только принимает. В передатчике в теле main цикличная отправка send_str_to_uart2("123"); На время передачи, при включенном irDA, RX USARTа принудительно отключается. В приемнике данные принимает USART1, а USART2 перекидывает их на комп в терминал. Пока не включен irDA и не установлен PSC-лер - все работает. При включении irDA вместо "123" на терминал приходят три нулевых байта. Осциллограмма на ножке RX приемника адекватная - скорость 9600, инвертированные импульсы 19,5 мкс (как раз 3/16) с верхним уровнем 3.3В. Правда нижний уровень не 0, а примерно 0,2В. Подозреваю, что данные криво декодируются SIR декодером. Весь мой небольшой опыт говорит о том, что если STM не работает - проблема не в нем, а в коде или настройках. Если кто в курсе проблемы - подскажите, пожалуйста. Не хочется в проект irDA микросхемы добавлять. Спасибо.
Проект в CoIDE. Настройки USART в передающем устройстве (STM32F100C4): RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); USART2->BRR=0x9c4; //BaudRate 9600 USART2->CR1 |= USART_CR1_TE; // передатчик USART2->CR1 |= USART_CR1_RE; // приемник USART2->CR3 |= USART_CR3_IREN; // ИК USART2->GTPR |= USART_GTPR_PSC_0; // PSC 001 USART2->CR1 |= USART_CR1_UE; // запуск USART
Настройки приемника (STM32F100RE): RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE); USART1->BRR=0x9c4; //BaudRate 9600 USART1->CR1 |= USART_CR1_TE; // передатчик USART1->CR1 |= USART_CR1_RE; // приемник USART1->CR3 |= USART_CR3_IREN; // ИК USART1->GTPR |= USART_GTPR_PSC_0; // PSC 001 USART1->CR1 |= USART_CR1_UE; // запуск USART NVIC_EnableIRQ(USART1_IRQn); //прерывания от UART1 USART1->CR1 |= USART_CR1_RXNEIE; //Прерывание по приему
В обработчике прерывания void USART1_IRQHandler (void): uart_data=USART1->DR; //Считываем что пришло USART2->DR = uart_data; // Отправка в компьютер
|