реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32f100 irDA SIR, Не декодируются данные после входа в USART при включенном irDA
RAmsi
сообщение Feb 29 2016, 15:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 5-04-09
Пользователь №: 47 200



Господа спецы, кто 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; // Отправка в компьютер
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.0132 секунд с 7
ELECTRONIX ©2004-2016