Как я понял, реализовано получение посимвольно с парсингом по символу "конец строки". В контроллерах STM32 (не знаю во всех ли) есть прерывание по таймауту приема и прерывание по IDLE пакету. Я ожидал, что видео будет про это. Т.к. хотелось бы кое-где использовать данный функционал, но пока не дошли руки его поизучать.
В примере я работал со знаком “ ” . Но смысл остается тем же - по любому знаку определить конец строки. Изначально я хотел с таймером заморочиться, типа запомнить время во время прерывания и если после последнего прерывания прошла 1 мс, то считаем, что прием закончен. Но подумал, что такой вариант не совсем универсален.
@@Solderingironspb У F0 серии есть прерывание по символу (character match). Упрощает данный алгоритм. Определение конца строки можно использовать, когда свой протокол передачи текстовых сообщений. В случае передачи шестнадцатиричных данных не получится указать конец строки. Тут либо указывать в начале пакета размер передаваемых данных, либо делать по таймауту или IDLE.
Ребят, в примере был подключен DMA по USART1_RX. Можно было этого не делать. В примере он не используется. Кого интересовала работа с флагом IDLE - см. урок 9 (STM32. UART, Прием данных, не зная размера данных. UART_IT_IDLE. Работа с прерываниями.)
Приветствую. Подскажите чем отличается callback от IRQHandler. Где то читал что прерывание одно на кучу функций (на прием, передачу и тд) и всегда срабатывает IRQHandler. А если нам нужно отследить конкретное то используем callback . Я правильно понимаю?
Добрый день! Одно срабатывает в main.c, другое в stm32xxxx_it.c. Как я понимаю, IRQHandler срабатывает всегда. Вы там можете уже сами по какому-либо флагу сортировать и получить по сути тот же callback.
Может я повторяюсь, но такой вопрос, на ардуино нано ведь rx и tx используют 5v, а как тога получается, что Вы на прямую подключаете stm? stm работаю с 3,3v на сколько я знаю.
@@Solderingironspb Ну вы зря так) Новое ядро stm32, адаптированное под arduino IDE не уступит по гибкости и даже удобнее с ним работать, чем в cube IDE или mKeil. Но я так понял, что stm32 программиста - круче, то, в какой среде он работает и сколько костылей изобрел, чем скорость, удобство работы с кодом и готовые электронные устройства.
Ну просто вот, как пример: Вы спрашиваете, как инициализировать передачу в UART на ноги PA9/PA10, что соответствует дефолтным ногам на usart1 у stm32f103. Ремап на PB6/PB7. Это настраивается при ините gpio. Работая с мк без ардуино, Вам не нужно спрашивать у ардуинщиков, что, как и куда. Вы просто откроете даташит и референс мануал, где все описано. Так работать удобнее. Просто многих пугает уход с ардуино. Я это понимаю, сам это проходил. Но спустя уже 3 года, могу с уверенностью сказать, что вообще не жалею об уходе и не собираюсь разбираться в чужом коде, когда легче написать свой по документации.
@@Solderingironspb На вашем канале вы сравниваете работу с Nano и с STM32 - вот и подумал, возможно знаете. А то все привыкли в CubeIDE "тыкать" по микросхеме стрелочкой мышки и генерировать код. Через arduino IDE тоже можно задать режим работы ног СТМ-ки. // RX TX HardwareSerial Serial1(PA10, PA9); void setup() { Serial1.begin(115200); } void loop() { Serial1.println("Hello World!"); delay(1000); } Для меня плюсы arduino IDE - код, который я пишу ... незамусоренный, как после Кьюбовского генератора.
А с чего взяли то, что с терминала должен конец строки прийти ввиде \0? Вроде в жизни никогда такого не было. Максимум cr или lf или и то и то.. Чтоб превратить в строку си надо изменить последний символ на \0 ну или предпоследний в зависимости от терминпла
Добрый день, работаю с HAL...по функции HAL_UART_Recive все прекрасно принимается и работает. Но когда отправляются две команды подряд, МК отрабатывает первую, отвечает результат по тому же UARTу, но новые команды уже не принимает. С чем это может быть связано и как это исправить?
Ответ кроется в 6 уроке. Это костыль от меня, как отправлять данные, используя IT функцию отправки. Т.к. мы не хотим ожидать завершения отправки сообщения, а хотим делать что-то еще, то пуляем данные, далее гуляем по циклу, возвращаемся к условию, отправилось ли прошлое сообщение. Если отправилось, то пуляем следующее и снова занимаемся своими делами. Может в экономии процессорного времени и есть выгода, но на практике я это редко использую) обычно просто блокирующая функция.
Титанический труд. Респектище!
Спасибо большое за твой труд!
Как я понял, реализовано получение посимвольно с парсингом по символу "конец строки". В контроллерах STM32 (не знаю во всех ли) есть прерывание по таймауту приема и прерывание по IDLE пакету. Я ожидал, что видео будет про это. Т.к. хотелось бы кое-где использовать данный функционал, но пока не дошли руки его поизучать.
В примере я работал со знаком “
” . Но смысл остается тем же - по любому знаку определить конец строки. Изначально я хотел с таймером заморочиться, типа запомнить время во время прерывания и если после последнего прерывания прошла 1 мс, то считаем, что прием закончен. Но подумал, что такой вариант не совсем универсален.
@@Solderingironspb У F0 серии есть прерывание по символу (character match). Упрощает данный алгоритм. Определение конца строки можно использовать, когда свой протокол передачи текстовых сообщений. В случае передачи шестнадцатиричных данных не получится указать конец строки. Тут либо указывать в начале пакета размер передаваемых данных, либо делать по таймауту или IDLE.
@@Solderingironspb как раз с таймером универсальнее
Пробовали? есть чем поделиться?
Ребят, в примере был подключен DMA по USART1_RX. Можно было этого не делать. В примере он не используется. Кого интересовала работа с флагом IDLE - см. урок 9 (STM32. UART, Прием данных, не зная размера данных. UART_IT_IDLE. Работа с прерываниями.)
Приветствую. Подскажите чем отличается callback от IRQHandler.
Где то читал что прерывание одно на кучу функций (на прием, передачу и тд) и всегда срабатывает IRQHandler.
А если нам нужно отследить конкретное то используем callback . Я правильно понимаю?
Добрый день!
Одно срабатывает в main.c, другое в stm32xxxx_it.c.
Как я понимаю, IRQHandler срабатывает всегда. Вы там можете уже сами по какому-либо флагу сортировать и получить по сути тот же callback.
Может я повторяюсь, но такой вопрос, на ардуино нано ведь rx и tx используют 5v, а как тога получается, что Вы на прямую подключаете stm? stm работаю с 3,3v на сколько я знаю.
На stm32 есть пины, толерантные к 5 вольтам. На схемах обозначаются, как «5V tolerant”.
Привет.
Сделать более свежий комит по исходникам к этому уроку .
Как инициализировать передачу в UART на ноги PA9/PA10 в ардуино IDE?
Добрый вечер) вообще без понятия, как в ардуино работать с stm32) переходите в нормальную среду и не мучайтесь)
@@Solderingironspb Ну вы зря так)
Новое ядро stm32, адаптированное под arduino IDE не уступит по гибкости и даже удобнее с ним работать, чем в cube IDE или mKeil.
Но я так понял, что stm32 программиста - круче, то, в какой среде он работает и сколько костылей изобрел, чем скорость, удобство работы с кодом и готовые электронные устройства.
Ну просто вот, как пример: Вы спрашиваете, как инициализировать передачу в UART на ноги PA9/PA10, что соответствует дефолтным ногам на usart1 у stm32f103. Ремап на PB6/PB7. Это настраивается при ините gpio. Работая с мк без ардуино, Вам не нужно спрашивать у ардуинщиков, что, как и куда. Вы просто откроете даташит и референс мануал, где все описано. Так работать удобнее. Просто многих пугает уход с ардуино. Я это понимаю, сам это проходил. Но спустя уже 3 года, могу с уверенностью сказать, что вообще не жалею об уходе и не собираюсь разбираться в чужом коде, когда легче написать свой по документации.
@@Solderingironspb На вашем канале вы сравниваете работу с Nano и с STM32 - вот и подумал, возможно знаете.
А то все привыкли в CubeIDE "тыкать" по микросхеме стрелочкой мышки и генерировать код.
Через arduino IDE тоже можно задать режим работы ног СТМ-ки.
// RX TX
HardwareSerial Serial1(PA10, PA9);
void setup() {
Serial1.begin(115200);
}
void loop() {
Serial1.println("Hello World!");
delay(1000);
}
Для меня плюсы arduino IDE - код, который я пишу ... незамусоренный, как после Кьюбовского генератора.
Я сейчас на cmsis прогаю) мусора кубовского вообще нет)
А с чего взяли то, что с терминала должен конец строки прийти ввиде \0? Вроде в жизни никогда такого не было. Максимум cr или lf или и то и то.. Чтоб превратить в строку си надо изменить последний символ на \0 ну или предпоследний в зависимости от терминпла
Так я и сказал, что его там нет. Просто когда я изучал это, то мне все твердили, что \0 там постоянно есть в конце.
@@Solderingironspb странные эти ваши все. Когда я начинал си изучать, то у строк ещё была длина в нулевом индексе вроде. Не помню уж где
Добрый день, работаю с HAL...по функции HAL_UART_Recive все прекрасно принимается и работает. Но когда отправляются две команды подряд, МК отрабатывает первую, отвечает результат по тому же UARTу, но новые команды уже не принимает. С чем это может быть связано и как это исправить?
Добрый день. Скиньте проект на solderingiron.notification@yandex.ru я гляну. Так быстрее поймем, в чем дело)
и еще одно, не пойму зачем очередь. что она дает?
Ответ кроется в 6 уроке. Это костыль от меня, как отправлять данные, используя IT функцию отправки. Т.к. мы не хотим ожидать завершения отправки сообщения, а хотим делать что-то еще, то пуляем данные, далее гуляем по циклу, возвращаемся к условию, отправилось ли прошлое сообщение. Если отправилось, то пуляем следующее и снова занимаемся своими делами. Может в экономии процессорного времени и есть выгода, но на практике я это редко использую) обычно просто блокирующая функция.