|
|
  |
UART2 на STM32F100C4 сплошные глюки :') |
|
|
|
Aug 29 2012, 13:40
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(ViKo @ Aug 29 2012, 16:50)  У вас в коде есть строчка (void)USART_DR; Как это работает? Прочитать регистр и выкинуть результат. Можно просто "USART_DR;", но приведение к void нагляднее. Где-то читал статейку, где это разжёвано. Если найду, приложу ссылку. Читал стандарт C99 - да, всё путём, так и должно работать, хотя кому-то покажется странным. Update: Вот интересная статья на эту тему. Краткое содержание: по стандарту Си код должен работать, но на практике он работает не со всеми компиляторами. По стандарту Си++ - вообще какой-то туман, и поведение компиляторов различается ещё сильнее. Получается, что если рассчитывать не на сферический компилятор в вакууме, которые следует стандарту до последней запятой, а на обычные глючные компиляторы, то лучше использовать более развёрнутую конструкцию с присвоением значения временной переменной.
|
|
|
|
|
Aug 29 2012, 14:39
|

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

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

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

|
Цитата(SSerge @ Aug 28 2012, 12:49)  Зря Вы в обработчике прерываний USART_IT_RXNE используете, эти ..... его очень оригинально определили. И он нифига не совпадает ни с USART_SR_RXNE ни с USART_FLAG_RXNE. спасибо, SSerge теперь не зависает, хотя передача пока так и не работает .. разбираюсь дальше... ну вот  уже лучше!!! данные передаются только ..... как и прежде передаю 1 - принимаю 129 (0х81) передаю 2 - принимаю 130 (0х82) передаю 3 - принимаю 131 (0х83) ... при передаче передаю несколько байт значения 129 а принимает терминал то как 129 (0x81), то как 1 (0x80) !!! что подскажете?
Сообщение отредактировал Bob176 - Aug 29 2012, 21:07
|
|
|
|
|
Aug 29 2012, 23:02
|
Местный
  
Группа: Участник
Сообщений: 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)
Сообщение отредактировал vlad_new - Aug 29 2012, 23:39
|
|
|
|
|
Sep 17 2012, 18:59
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 18 2012, 10:06
|
Участник

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

|
Цитата(_Pasha @ Sep 17 2012, 23:06)  импульс, коорый воспринимается как старт-бит? это одиночная посылка Цитата(_Pasha @ Sep 17 2012, 23:06)  что у Вас за схема по RS-у ? оптопары, управление потоком через транзистор инвертируется.
|
|
|
|
|
Sep 18 2012, 10:39
|
Частый гость
 
Группа: Участник
Сообщений: 107
Регистрация: 26-09-10
Пользователь №: 59 748

|
Цитата(Bob176 @ Sep 17 2012, 22:59)  может кто чего подскажет? где копать? а на чем без кода гадать?
|
|
|
|
|
Sep 18 2012, 11:05
|
Участник

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

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