Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 21:58

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: f103cbt6 UART
СообщениеДобавлено: 15 апр 2012, 16:00 
Заглядывает иногда

Зарегистрирован: 02 янв 2012, 15:04
Сообщения: 35
Здравствуйте!
Осваиваю камень f103cbt6 совместно с CoIDE. Пытаюсь использовать UART и получаю непонятки... Может кто подскажет где собаке порыться:
Настраиваю USART1 на работу с прерываниями по приему/опустошению передатчика.
Show

Однако при выполнении USART_ITConfig, первая команда (USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);) проходит, а на второй (USART_ITConfig(USART1, USART_IT_TXE, ENABLE);) контроллер подвисает.
Это вопрос номер 1.

Вопрос номер два:
Коментирую строки
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // разрешаем прерывания
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
отправляю в UART слово test по байтно командой
USART_SendData и жду отправки while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
Однако в терминале вижу следующее:
<0>est<0>
т.е. в начале и в конце следуют NUL символы и "пропадает" первый байт...
Буду благодарен за любые предположения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: f103cbt6 UART
СообщениеДобавлено: 16 апр 2012, 09:17 
Заглядывает иногда

Зарегистрирован: 02 янв 2012, 15:04
Сообщения: 35
С завершающим NUL разобрался - просто посылал на один символ больше, чем есть на самом деле. А вот с первым...
Я пробовал запускать эту же прогу на Pinboard II там передача отлично работает... а вот моя железяка уверенно передает первый NUL использую связку stm32f103cbt6 -> max3232 -> ПК.
Попробовал взять Rx прямо с контроллера на моей плате и подключил к соответствующему входу на PinBoard - все передается на ура... Похоже max3232 мозг выносит....

А вот два прерывания разрешить не получается нигде... как быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: f103cbt6 UART
СообщениеДобавлено: 16 апр 2012, 10:08 
Старожил
Аватара пользователя

Зарегистрирован: 09 ноя 2010, 11:05
Сообщения: 2105
Откуда: Казань
USART_ITConfig(USART1, USART_IT_RXNE | USART_IT_TXE, ENABLE); - хотя это и не принципиально, можно и по отдельности.

обработчик прерываний имеется ? подвисает - т.к. уходит на прерывание TXE, а обработчика видимо нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: f103cbt6 UART
СообщениеДобавлено: 17 апр 2012, 22:02 
Заглядывает иногда

Зарегистрирован: 02 янв 2012, 15:04
Сообщения: 35
Итак: первый символ NUL проскакивает после сброса МК... В дальнейшем передача идет как нужно. Может, чтобы исключить этот мусор при рестарте нужно включать тактирование переферии после после задания всех параметров?
Что касается зависания при USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
Висит действительно в обработчике прерывания он таков:
if ( USART_GetITStatus(USART1, USART_IT_TXE) ) {
USART_ClearITPendingBit(USART1, USART_IT_TXE);}
Вроде бит сбрасываем, но прерывание вновь срабатывает...
Цитата:
USART_ITConfig(USART1, USART_IT_RXNE | USART_IT_TXE, ENABLE); - хотя это и не принципиально, можно и по отдельности.

Вот здесь http://we.easyelectronics.ru/STM32/rukovodstvo-k-bystromu-startu-po-rabote-s-periferiey-stm32f10x.html автор утверждает:

Цитата:
Обратите внимание, что в отличие от констант RCC описанные здесь константы не являются масками, и через побитовое ИЛИ их объединять нельзя. Например, для включения прерывания и при приёме байта и при успешной передаче байта, придется писать две команды:

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: f103cbt6 UART
СообщениеДобавлено: 18 апр 2012, 07:46 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
formark писал(а):
Вот здесь http://we.easyelectronics.ru/STM32/rukovodstvo-k-bystromu-startu-po-rabote-s-periferiey-stm32f10x.html автор утверждает:

Цитата:
Обратите внимание...

Достаточно просто почитать описание функции стандартной библиотеки. Описания предворяют каждую функцию и иногда полезнее чем RefManual. Даже английский не обязательно хорошо знать.
stm32f10x_usart.c писал(а):
* @param USART_IT: specifies the USART interrupt sources to be enabled or disabled.
* This parameter can be one of the following values:
* @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
* @arg USART_IT_LBD: LIN Break detection interrupt
* @arg USART_IT_TXE: Transmit Data Register empty interrupt
* @arg USART_IT_TC: Transmission complete interrupt
* @arg USART_IT_RXNE: Receive Data register not empty interrupt
* @arg USART_IT_IDLE: Idle line detection interrupt
* @arg USART_IT_PE: Parity Error interrupt
* @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error)
Параметр может иметь одно значение.

В случае значений полей маски передаваемых в кач-ве параметров будет написано например:
stm32f10x_usart.c писал(а):
* @param USART_FLAG: specifies the flag to clear.
* This parameter can be any combination of the following values:
* @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5).
* @arg USART_FLAG_LBD: LIN Break detection flag.
* @arg USART_FLAG_TC: Transmission Complete flag.
* @arg USART_FLAG_RXNE: Receive data register not empty flag.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Eddy_Em, Oxford


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB