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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> UART2 на STM32F100C4 сплошные глюки :')
scifi
сообщение Aug 29 2012, 13:40
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ViKo @ Aug 29 2012, 16:50) *
У вас в коде есть строчка
(void)USART_DR;
Как это работает?

Прочитать регистр и выкинуть результат. Можно просто "USART_DR;", но приведение к void нагляднее. Где-то читал статейку, где это разжёвано. Если найду, приложу ссылку. Читал стандарт C99 - да, всё путём, так и должно работать, хотя кому-то покажется странным.

Update:
Вот интересная статья на эту тему. Краткое содержание: по стандарту Си код должен работать, но на практике он работает не со всеми компиляторами. По стандарту Си++ - вообще какой-то туман, и поведение компиляторов различается ещё сильнее.
Получается, что если рассчитывать не на сферический компилятор в вакууме, которые следует стандарту до последней запятой, а на обычные глючные компиляторы, то лучше использовать более развёрнутую конструкцию с присвоением значения временной переменной.
Go to the top of the page
 
+Quote Post
sidy
сообщение Aug 29 2012, 14:20
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 280
Регистрация: 2-11-08
Пользователь №: 41 333



Т.е. если Вы находитесь в режиме передачи, но что-то приняли то таким образом очищаете принятые данные?
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 29 2012, 14:26
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(sidy @ Aug 29 2012, 18:20) *
Т.е. если Вы находитесь в режиме передачи, но что-то приняли то таким образом очищаете принятые данные?

В коде это видно: если в приёмном буфере нет места, то выбросить принятый байт. Это нештатная ситуация.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Aug 29 2012, 14:39
Сообщение #19


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(scifi @ Aug 29 2012, 16:40) *
Краткое содержание: по стандарту Си код должен работать, но на практике он работает не со всеми компиляторами. По стандарту Си++ - вообще какой-то туман, и поведение компиляторов различается ещё сильнее.
Получается, что если рассчитывать не на сферический компилятор в вакууме, которые следует стандарту до последней запятой, а на обычные глючные компиляторы, то лучше использовать более развёрнутую конструкцию с присвоением значения временной переменной.

Спасибо. В-общем, "Не надо, как лучше. Надо, как положено." (с)
Go to the top of the page
 
+Quote Post
Bob176
сообщение Aug 29 2012, 21:05
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



Цитата(SSerge @ Aug 28 2012, 12:49) *
Зря Вы в обработчике прерываний USART_IT_RXNE используете, эти ..... его очень оригинально определили.
И он нифига не совпадает ни с USART_SR_RXNE ни с USART_FLAG_RXNE.


спасибо, SSerge теперь не зависает, хотя передача пока так и не работает crying.gif

.. разбираюсь дальше...


ну вот laughing.gif уже лучше!!!

данные передаются только ..... как и прежде

передаю 1 - принимаю 129 (0х81)
передаю 2 - принимаю 130 (0х82)
передаю 3 - принимаю 131 (0х83)
...

при передаче
передаю несколько байт значения 129 а принимает терминал то как 129 (0x81), то как 1 (0x80) !!!

что подскажете?

Сообщение отредактировал Bob176 - Aug 29 2012, 21:07
Go to the top of the page
 
+Quote Post
vlad_new
сообщение Aug 29 2012, 23:02
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 218
Регистрация: 24-06-10
Пользователь №: 58 127



Цитата(Bob176 @ Aug 30 2012, 01:05) *
данные передаются только ..... как и прежде

передаю 1 - принимаю 129 (0х81)
передаю 2 - принимаю 130 (0х82)
передаю 3 - принимаю 131 (0х83)
...

при передаче
передаю несколько байт значения 129 а принимает терминал то как 129 (0x81), то как 1 (0x80) !!!

что подскажете?


USART2->CR2 |= USART_CR2_STOP_0; //Количество стоп-битов: 2
Как то странно выглядет. Может все же ..._STOP_2 ?
Хотя в ST-эшной библиотеке на F0 все еще прикольней выглядет:
#define USART_StopBits_2 ((uint32_t)USART_CR2_STOP_1)
sm.gif



Сообщение отредактировал vlad_new - Aug 29 2012, 23:39
Go to the top of the page
 
+Quote Post
Bob176
сообщение Aug 30 2012, 06:36
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



Цитата(vlad_new @ Aug 30 2012, 02:02) *
#define USART_StopBits_2 ((uint32_t)USART_CR2_STOP_1)

biggrin.gif biggrin.gif biggrin.gif

вечером проверю, хотя... думаю дело не в этом. Надо посмотреть подтяжку у TX & RX
Go to the top of the page
 
+Quote Post
Bob176
сообщение Aug 30 2012, 18:18
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870




мнда... и всё же паритет!!! rolleyes.gif


всем спасибо bb-offtopic.gif



Сообщение отредактировал Bob176 - Aug 30 2012, 18:19
Go to the top of the page
 
+Quote Post
Bob176
сообщение Sep 17 2012, 18:59
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



ещё одна проблемка нарисовалась...

до скорости обмена 9600 всё работает хорошо. и принимаю и передаю как надо, а вот если увеличиваю скорость обмена, то принимается всё корректно, а при передаче передаётся ещё один ненужный байт!

скорость 9600
Send: 01-04-00-01-00-01-60-0A (8 bytes)
Recv: 01-04-02-65-64-93-8B (7 bytes)
Error: NONE; Data = 65-64; Time: 46

скорость 19200
Send: 01-04-00-01-00-01-60-0A (8 bytes)
Recv: 01-04-02-65-64-93-8B-FF (8 bytes)
Error: CRC+LENGTH; Data = NOT DETECTED; Time: 46

может кто чего подскажет? где копать?

Сообщение отредактировал Bob176 - Sep 17 2012, 19:00
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 17 2012, 19:04
Сообщение #25


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Bob176 @ Sep 17 2012, 21:59) *
где копать?
В программе. 115200, 9600, 57600 - полет нормальный.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 17 2012, 19:06
Сообщение #26


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Bob176 @ Sep 17 2012, 21:59) *
до скорости обмена 9600 всё работает хорошо

импульс, коорый воспринимается как старт-бит?
А что у Вас за схема по RS-у ?
Go to the top of the page
 
+Quote Post
Bob176
сообщение Sep 18 2012, 10:06
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



Цитата(_Pasha @ Sep 17 2012, 23:06) *
импульс, коорый воспринимается как старт-бит?

это одиночная посылка

Цитата(_Pasha @ Sep 17 2012, 23:06) *
что у Вас за схема по RS-у ?


оптопары, управление потоком через транзистор инвертируется.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Sep 18 2012, 10:16
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Bob176 @ Sep 18 2012, 14:06) *
оптопары, управление потоком через транзистор инвертируется.

А скорострельность оптопары?? Чтобы 115200 проходило нужно тщательно отбирать оптопары. Типовое время отклика 18-20мкс, а это уже соизмеримо с длительностью импульса на 115200.
Go to the top of the page
 
+Quote Post
MBR
сообщение Sep 18 2012, 10:39
Сообщение #29


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748



Цитата(Bob176 @ Sep 17 2012, 22:59) *
может кто чего подскажет? где копать?

а на чем без кода гадать?
Go to the top of the page
 
+Quote Post
Bob176
сообщение Sep 18 2012, 11:05
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-01-09
Пользователь №: 43 870



Цитата(DmitryM @ Sep 18 2012, 14:16) *
А скорострельность оптопары?? Чтобы 115200 проходило нужно тщательно отбирать оптопары. Типовое время отклика 18-20мкс, а это уже соизмеримо с длительностью импульса на 115200.

оптопары скорострельные H11L1

Цитата
а на чем без кода гадать?

мне идея нужна...

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 15:02
Рейтинг@Mail.ru


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