Всем привет!
После инициализации UART и включения трансмиттера отправляется т.н. idle frame (0хFF). Вычитывание из регистра данных ничего не дает. Посоветуйте, как от этого избавиться? Или сначала записать данные, а потом установить TXE? В РС есть команда очистить буфер, может и здесь как-то можно?
STM32F103 как очистить буфер UART?
- Реклама
Re: STM32F103 как очистить буфер UART?
Сначала заполнять DR не поможет, судя по Reference manual от этого не избавиться...Tacho писал(а):Всем привет!
После инициализации UART и включения трансмиттера отправляется т.н. idle frame (0хFF). Вычитывание из регистра данных ничего не дает. Посоветуйте, как от этого избавиться? Или сначала записать данные, а потом установить TXE? В РС есть команда очистить буфер, может и здесь как-то можно?
Только в режиме Smartcard mode отсутствует IDLE frame.
А чем idle мешает? Ведь не стартов ни стопов не передается - тупо задержка на размер кадра.
— Не говорите мне что делать и я не скажу куда Вам идти...
Re: STM32F103 как очистить буфер UART?
FF принимается СОМ портом, значит старт\стоп есть. Особо, конечно, не мешает, просто не культурно как-то.
Re: STM32F103 как очистить буфер UART?
Странно, у меня не передает... Точнее старт бит не передает- 0xff и стоп они и так одного уровня...
Настроение бодрое, отдохнувшее, вот и не поленился тестик набросать...
Вот кусок теста:
Настройка USART
на след картинке передаем "R". Спад верхнего сигнала соответствует установке бита TE.
Нихний сигнал - вывод TX RS232 (снимается после max232 потому и сигнал инвертирован).
Хорошо виден IDLE и после него сам символ. Фронт верхнего сигнала соотв. сбросу бита TE.
В терминале принимаем только символы "R".

Теперь закомментируем строку USART1->DR='R';
Никаких стартов на осцилографе нет. Терминал так-же ничего не принимает!

Настроение бодрое, отдохнувшее, вот и не поленился тестик набросать...
Вот кусок теста:
Код: Выделить всё
USART1->CR1|=((uint16_t)0x2000); // Установили UE бит
for (;;) {
USART1->DR='R';
USART1->CR1|=USART_Mode_Tx; // Установили TE
LR_ON(); //Спад синхро
_delay_us(500);
USART1->CR1&=~USART_Mode_Tx; // Сбросили TE
LR_OFF(); //Фронт синхро
_delay_us(100);
}
Код: Выделить всё
usart_init_struct.USART_BaudRate=57600UL;
usart_init_struct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
usart_init_struct.USART_Mode=USART_Mode_Tx;
usart_init_struct.USART_Parity=USART_Parity_No;
usart_init_struct.USART_StopBits=USART_StopBits_1;
usart_init_struct.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&usart_init_struct);
Нихний сигнал - вывод TX RS232 (снимается после max232 потому и сигнал инвертирован).
Хорошо виден IDLE и после него сам символ. Фронт верхнего сигнала соотв. сбросу бита TE.
В терминале принимаем только символы "R".
Теперь закомментируем строку USART1->DR='R';
Никаких стартов на осцилографе нет. Терминал так-же ничего не принимает!
— Не говорите мне что делать и я не скажу куда Вам идти...
Re: STM32F103 как очистить буфер UART?
Чудеса какие-то! Завтра осциллографом посмотрю откуда этот фф берется.
- Реклама
Re: STM32F103 как очистить буфер UART?
FF оказалось просадкой при смене уровня на выходе с 5 вольт мах232 на 3 в. стм32 при инициализации.
Re: STM32F103 как очистить буфер UART?
Извиняюсь,что в предыдущем посте написал MAX232...Tacho писал(а):FF оказалось просадкой при смене уровня на выходе с 5 вольт мах232 на 3 в. стм32 при инициализации.
Перепроверил - у меня везде MAX3232 стоят. Работают от 3.3В.
— Не говорите мне что делать и я не скажу куда Вам идти...


