jcxz 241 12 октября, 2020 Опубликовано 12 октября, 2020 · Жалоба 11 минут назад, Сергей Борщ сказал: Более грамотно одной командной прописать сразу все биты в нужное значение (пример для F0x): Забыли ещё сказать, что и установку всех прочих регистров UART и DMA нужно делать ДО этой записи, а не ПОСЛЕ. Вангую что сейчас ТС налепит очередного быдлокода, в котором всё будет делать наоборот. 1 час назад, Alex_Golubev сказал: Я посчитал входная тактовая 120 * 10 ^6 / 19200 = 6250. В адекватно написанном исходнике подобное выражение должно быть в самом исходнике, вместо "магического" числа: USART3->BRR = 6250; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 октября, 2020 Опубликовано 12 октября, 2020 · Жалоба 3 minutes ago, jcxz said: Забыли ещё сказать Тогда уж уточним, что ножки конфигурировать нужно вообще в конце - с настроенной периферией. Вот теперь у автора топика есть всё необходимое для правильной п иплодотворной работы))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 12 октября, 2020 Опубликовано 12 октября, 2020 · Жалоба 12 минут назад, haker_fox сказал: Тогда уж уточним, что ножки конфигурировать нужно вообще в конце - с настроенной периферией. Само собой. И это тоже. И частоту МК (а точнее APB-шины на которой сидит UART (120)) тоже плохо задавать "магическим" числом. Обо всём этом уже много раз говорили. Да даже здравый смысл об этом должен говорить. Но начинающие так и лепят как попало, не включая голову. 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 12 октября, 2020 Опубликовано 12 октября, 2020 · Жалоба Цитата но при этом почему-то не делаете предварительной очистки запроса прерывания в NVIC перед его разрешением: Какой командой это сделать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 12 октября, 2020 Опубликовано 12 октября, 2020 · Жалоба 15 minutes ago, Alex_Golubev said: Какой командой это сделать ? Не командой, функцией. NVIC_ClearPendingIRQ( irq_name); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 12 октября, 2020 Опубликовано 12 октября, 2020 · Жалоба понял спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ostroukhov1991 0 9 декабря, 2023 Опубликовано 9 декабря, 2023 · Жалоба Народ всем привет. Нужда заставила впервые сесть за STM32 и сразу на H743VIT6. Так как сроки сжатые, естественно пришлось заюзать CubeIDE+CubeMX (что мне лично сильно не нравиться, в виду того что и на Атмелах и на микрочипе всегда работал напрямую без мусорных библиотек). Непонятка такая: У меня имеется функция, которая раз в 200мс шлет пакет по usart на ПК через функцию HAL...Transmit(). Пока я считываю входящие байты через HAL_...Receive(), вроде бы все ок, но как только я хочу сделать это по прерываниям функцией ... Receive_IT(), то функция поставленная перед while() просто отрубает даже передачу данных. Кто-то сталкивался с этим багом? Перепробовал уже кучу костылей, но блин в HAL концов не найдешь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 9 декабря, 2023 Опубликовано 9 декабря, 2023 · Жалоба 1 час назад, Ostroukhov1991 сказал: У меня имеется функция, которая раз в 200мс шлет пакет по usart на ПК через функцию HAL...Transmit(). Пока я считываю входящие байты через HAL_...Receive(), вроде бы все ок, но как только я хочу сделать это по прерываниям функцией ... Receive_IT(), то функция поставленная перед while() просто отрубает даже передачу данных. Кто-то сталкивался с этим багом? Перепробовал уже кучу костылей, но блин в HAL концов не найдешь... UART - настолько простой интерфейс, что прочитать несколько страниц мануала и понять как он работает - это много быстрее, чем лепить наугад костыли. Тем более, если вы действительно "всегда работал напрямую без мусорных библиотек", то это вообще не должно быть для вас проблемой. А мифическое "нет времени" - это просто отмазка собственной лени. В дальнейшем, на блуждание в собственных костылях, времени потратите гораздо больше, чем если бы сели и изучили. В 12.10.2020 в 16:46, haker_fox сказал: Не командой, функцией. NVIC_ClearPendingIRQ( irq_name); А можно и командой: //Сброс состояния ожидания для прерывания num #define IntClr(num) (NVIC.CLRPEND[(num) >> 5] = 1u << ((num) & 0x1F)) Правда - лучше после этого ещё выполнить обратное чтение регистра NVIC.CLRPEND. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ostroukhov1991 0 9 декабря, 2023 Опубликовано 9 декабря, 2023 (изменено) · Жалоба В этом и прикол. В том же PIC24H юарт запускается горсткой регистров (про атмел вообще молчу). У HAL колбэк не работает, при чтении по _IT какой-то невменоз. Залез под капот HAL и диву дался, сколько раз там из структуры в структуру перекладывается все. Это видимо хорошо, что в таких простых вещах, CubeMX не очень хорошо на берегу себя продемонстрировал. Уже решил для себя что лучше по старике сформировать свои гарантированно и понятно работающие функции с опорой на голый CMSIS, чем превращать такой мощный камень в ардуиноподобный черный ящик. Штучки как куб конечно расхолаживают, пока по DS не пробежишься разок при написании функций, не поймёшь что из себя представляет камень. Да и загаженность сгенерированного проекта кучей комментов не нравится. Изменено 9 декабря, 2023 пользователем Ostroukhov1991 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 9 декабря, 2023 Опубликовано 9 декабря, 2023 · Жалоба 2 часа назад, Ostroukhov1991 сказал: Залез под капот HAL и диву дался, сколько раз там из структуры в структуру перекладывается все. Здесь на форуме полно апологетов такого стиля "работы". Можете убедиться: с пеной у рта доказывают, что так и надо делать. Перекладывать, перекладывать и перекладывать! И пофиг сколько ресурсов сожрёт такое бездумное перекладывание из пустого в порожнее... 2 часа назад, Ostroukhov1991 сказал: Уже решил для себя что лучше по старике сформировать свои гарантированно и понятно работающие функции с опорой на голый CMSIS, чем превращать такой мощный камень в ардуиноподобный черный ящик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 9 декабря, 2023 Опубликовано 9 декабря, 2023 · Жалоба В том же PIC24H юарт запускается горсткой регистров (про атмел вообще молчу). Вы не поверите: в STMе горстка регистров для уарта ни чуть не больше (про атмеловские SAMы вообще молчу (((-8Ж ). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ostroukhov1991 0 10 декабря, 2023 Опубликовано 10 декабря, 2023 · Жалоба 9 часов назад, jcxz сказал: Кубик в кубе) Все бы может и проканывало с таким порядком вещей если бы была аля бытовая железка, но данный ЭБУ рулит 5ти осевым сварочным станком при этом общаясь плотно со стойкой управления по токовой петле. PIC24HJ в целом справлялся, но во время движения подлагивал, так как очень много математики синхронизации всех осей из которых 2 поворотные. Поэтому я и принял волевое решение сесть на STM32 который в 12 раз быстрее и имеет в 16 раз больше flash и в 64 раза больше оперативки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 10 декабря, 2023 Опубликовано 10 декабря, 2023 · Жалоба 1 час назад, Ostroukhov1991 сказал: Поэтому я и принял волевое решение сесть на STM32 который в 12 раз быстрее и имеет в 16 раз больше flash и в 64 раза больше оперативки. ......и теперь будете как все - генерить портянки перекладываний из структуры в структуру? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 10 декабря, 2023 Опубликовано 10 декабря, 2023 · Жалоба 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. Причем обнуление двух регистров в принципе лишнее. Они и так при сбросе обнуляются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 10 декабря, 2023 Опубликовано 10 декабря, 2023 · Жалоба 16 минут назад, dimka76 сказал: Причем обнуление двух регистров в принципе лишнее. Они и так при сбросе обнуляются. В идеале, все же, приводить все регистры в известное состояние вне зависимости от значений по-умолчанию при сбросе🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться