STM32F103 как очистить буфер UART?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Tacho
Родился
Сообщения: 8
Зарегистрирован: Пт янв 06, 2012 19:04:54

STM32F103 как очистить буфер UART?

Сообщение Tacho »

Всем привет!
После инициализации UART и включения трансмиттера отправляется т.н. idle frame (0хFF). Вычитывание из регистра данных ничего не дает. Посоветуйте, как от этого избавиться? Или сначала записать данные, а потом установить TXE? В РС есть команда очистить буфер, может и здесь как-то можно?
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32F103 как очистить буфер UART?

Сообщение md5sum »

Tacho писал(а):Всем привет!
После инициализации UART и включения трансмиттера отправляется т.н. idle frame (0хFF). Вычитывание из регистра данных ничего не дает. Посоветуйте, как от этого избавиться? Или сначала записать данные, а потом установить TXE? В РС есть команда очистить буфер, может и здесь как-то можно?
Сначала заполнять DR не поможет, судя по Reference manual от этого не избавиться...
Только в режиме Smartcard mode отсутствует IDLE frame.

А чем idle мешает? Ведь не стартов ни стопов не передается - тупо задержка на размер кадра.
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Tacho
Родился
Сообщения: 8
Зарегистрирован: Пт янв 06, 2012 19:04:54

Re: STM32F103 как очистить буфер UART?

Сообщение Tacho »

FF принимается СОМ портом, значит старт\стоп есть. Особо, конечно, не мешает, просто не культурно как-то.
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32F103 как очистить буфер UART?

Сообщение md5sum »

Странно, у меня не передает... Точнее старт бит не передает- 0xff и стоп они и так одного уровня...

Настроение бодрое, отдохнувшее, вот и не поленился тестик набросать... :write:
Вот кусок теста:

Код: Выделить всё

		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

Код: Выделить всё

	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);
на след картинке передаем "R". Спад верхнего сигнала соответствует установке бита TE.
Нихний сигнал - вывод TX RS232 (снимается после max232 потому и сигнал инвертирован).
Хорошо виден IDLE и после него сам символ. Фронт верхнего сигнала соотв. сбросу бита TE.
В терминале принимаем только символы "R".
Изображение
Теперь закомментируем строку USART1->DR='R';
Никаких стартов на осцилографе нет. Терминал так-же ничего не принимает!
Изображение
Вложения
t2.jpg
(8.29 КБ) 2171 скачивание
t1.jpg
(8.94 КБ) 2509 скачиваний
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Эиком - электронные компоненты и радиодетали
Tacho
Родился
Сообщения: 8
Зарегистрирован: Пт янв 06, 2012 19:04:54

Re: STM32F103 как очистить буфер UART?

Сообщение Tacho »

Чудеса какие-то! Завтра осциллографом посмотрю откуда этот фф берется.
Реклама
Tacho
Родился
Сообщения: 8
Зарегистрирован: Пт янв 06, 2012 19:04:54

Re: STM32F103 как очистить буфер UART?

Сообщение Tacho »

FF оказалось просадкой при смене уровня на выходе с 5 вольт мах232 на 3 в. стм32 при инициализации.
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32F103 как очистить буфер UART?

Сообщение md5sum »

Tacho писал(а):FF оказалось просадкой при смене уровня на выходе с 5 вольт мах232 на 3 в. стм32 при инициализации.
Извиняюсь,что в предыдущем посте написал MAX232...
Перепроверил - у меня везде MAX3232 стоят. Работают от 3.3В.
— Не говорите мне что делать и я не скажу куда Вам идти...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»