Перейти к содержанию
    

STM32h7 USART включение бита четности

11 минут назад, Сергей Борщ сказал:

Более грамотно одной командной прописать сразу все биты в нужное значение (пример для F0x):

Забыли ещё сказать, что и установку всех прочих регистров UART и DMA нужно делать ДО этой записи, а не ПОСЛЕ. Вангую что сейчас ТС налепит очередного быдлокода, в котором всё будет делать наоборот. :biggrin:

1 час назад, Alex_Golubev сказал:

Я посчитал входная тактовая 120 * 10 ^6 / 19200 = 6250. 

В адекватно написанном исходнике подобное выражение должно быть в самом исходнике, вместо "магического" числа: USART3->BRR = 6250;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, jcxz said:

Забыли ещё сказать

Тогда уж уточним, что ножки конфигурировать нужно вообще в конце - с настроенной периферией. Вот теперь у автора топика есть всё необходимое для правильной п иплодотворной работы)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, haker_fox сказал:

Тогда уж уточним, что ножки конфигурировать нужно вообще в конце - с настроенной периферией.

Само собой. И это тоже.

И частоту МК (а точнее APB-шины на которой сидит UART (120)) тоже плохо задавать "магическим" числом.

Обо всём этом уже много раз говорили. Да даже здравый смысл об этом должен говорить. Но начинающие так и лепят как попало, не включая голову.  :unknw:

 

2 часа назад, Alex_Golubev сказал:
  Скрыть содержимое


	DMA1_Stream1->CR &= ~DMA_SxCR_EN; // выключаем DMA
	while (DMA1_Stream1->CR & DMA_SxCR_EN); // ждем чтобы гарантировано был отключен DMA

	NVIC_SetPriority(DMA1_Stream1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0)); // включение прерывания приемника
    NVIC_EnableIRQ(DMA1_Stream1_IRQn);

 

 

Делаете предварительное выключение DMA (видимо считая что он может быть включен до этого), но при этом почему-то не делаете предварительной очистки запроса прерывания в NVIC перед его разрешением: NVIC_EnableIRQ(DMA1_Stream1_IRQn);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

но при этом почему-то не делаете предварительной очистки запроса прерывания в NVIC перед его разрешением:

Какой командой это сделать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, Alex_Golubev said:

Какой командой это сделать ?

Не командой, функцией.

NVIC_ClearPendingIRQ( irq_name);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Народ всем привет. Нужда заставила впервые сесть за STM32 и сразу на H743VIT6. Так как сроки сжатые, естественно пришлось заюзать CubeIDE+CubeMX (что мне лично сильно не нравиться, в виду того что и на Атмелах и на микрочипе всегда работал напрямую без мусорных библиотек). Непонятка такая: У меня имеется функция, которая раз в 200мс шлет пакет по usart на ПК через функцию HAL...Transmit(). Пока я считываю входящие байты через HAL_...Receive(), вроде бы все ок, но как только я хочу сделать это по прерываниям функцией ... Receive_IT(), то функция поставленная перед while() просто отрубает даже передачу данных. Кто-то сталкивался с этим багом? Перепробовал уже кучу костылей, но блин в HAL концов не найдешь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Ostroukhov1991 сказал:

У меня имеется функция, которая раз в 200мс шлет пакет по usart на ПК через функцию HAL...Transmit(). Пока я считываю входящие байты через HAL_...Receive(), вроде бы все ок, но как только я хочу сделать это по прерываниям функцией ... Receive_IT(), то функция поставленная перед while() просто отрубает даже передачу данных. Кто-то сталкивался с этим багом? Перепробовал уже кучу костылей, но блин в HAL концов не найдешь...

UART - настолько простой интерфейс, что прочитать несколько страниц мануала и понять как он работает - это много быстрее, чем лепить наугад костыли. Тем более, если вы действительно "всегда работал напрямую без мусорных библиотек", то это вообще не должно быть для вас проблемой.

А мифическое "нет времени" - это просто отмазка собственной лени. В дальнейшем, на блуждание в собственных костылях, времени потратите гораздо больше, чем если бы сели и изучили.

В 12.10.2020 в 16:46, haker_fox сказал:

Не командой, функцией.

NVIC_ClearPendingIRQ( irq_name);

А можно и командой:  :wink:

//Сброс состояния ожидания для прерывания num
#define IntClr(num) (NVIC.CLRPEND[(num) >> 5] = 1u << ((num) & 0x1F))

Правда - лучше после этого ещё выполнить обратное чтение регистра NVIC.CLRPEND.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этом и прикол. В том же PIC24H юарт запускается горсткой регистров (про атмел вообще молчу). У HAL колбэк не работает, при чтении по _IT какой-то невменоз. Залез под капот HAL и диву дался, сколько раз там из структуры в структуру перекладывается все. Это видимо хорошо, что в таких простых вещах, CubeMX не очень хорошо на берегу себя продемонстрировал. Уже решил для себя что лучше по старике сформировать свои гарантированно и понятно работающие функции с опорой на голый CMSIS, чем превращать такой мощный камень в ардуиноподобный черный ящик. Штучки как куб конечно расхолаживают, пока по DS не пробежишься разок при написании функций, не поймёшь что из себя представляет камень. Да и загаженность сгенерированного проекта кучей комментов не нравится.

Изменено пользователем Ostroukhov1991

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Ostroukhov1991 сказал:

Залез под капот HAL и диву дался, сколько раз там из структуры в структуру перекладывается все.

Здесь на форуме полно апологетов такого стиля "работы". Можете убедиться:

с пеной у рта доказывают, что так и надо делать. Перекладывать, перекладывать и перекладывать! :biggrin:

И пофиг сколько ресурсов сожрёт такое бездумное перекладывание из пустого в порожнее...

2 часа назад, Ostroukhov1991 сказал:

Уже решил для себя что лучше по старике сформировать свои гарантированно и понятно работающие функции с опорой на голый CMSIS, чем превращать такой мощный камень в ардуиноподобный черный ящик.

:good:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том же PIC24H юарт запускается горсткой регистров (про атмел вообще молчу).
Вы не поверите: в STMе горстка регистров для уарта ни чуть не больше (про атмеловские SAMы вообще молчу (((-8Ж ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, jcxz сказал:

 

 

Кубик в кубе)

Все бы может и проканывало с таким порядком вещей если бы была аля бытовая железка, но данный ЭБУ рулит 5ти осевым сварочным станком при этом общаясь плотно со стойкой управления по токовой петле. PIC24HJ в целом справлялся, но во время движения подлагивал, так как очень много математики синхронизации всех осей из которых 2 поворотные. Поэтому я и принял волевое решение сесть на STM32 который в 12 раз быстрее и имеет в 16 раз больше flash и в 64 раза больше оперативки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Ostroukhov1991 сказал:

Поэтому я и принял волевое решение сесть на STM32 который в 12 раз быстрее и имеет в 16 раз больше flash и в 64 раза больше оперативки.

......и теперь будете как все - генерить портянки перекладываний из структуры в структуру?  :wink:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/9/2023 at 10:48 PM, Ostroukhov1991 said:

 В том же PIC24H юарт запускается горсткой регистров (про атмел вообще молчу). 

USART1->CR1 = USART_CR1_TE;
USART1->CR2 = 0;
USART1->CR3 = 0;

USART1->BRR = 26;

USART1->CR1 |= USART_CR1_UE; // uart enable

Вот для STM32H743.

Причем обнуление двух регистров в принципе лишнее. Они и так при сбросе обнуляются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, dimka76 сказал:

Причем обнуление двух регистров в принципе лишнее. Они и так при сбросе обнуляются.

В идеале, все же, приводить все регистры в известное состояние вне зависимости от значений по-умолчанию при сбросе🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...