|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
|
Вопросы по работе UART через HAL.18.10.2016, 11:19. Показов 22897. Ответов 47
Метки нет (Все метки)
HAL_UART_Receive_IT(&huart1,&test[0],100);
HAL_UART_Transmit_IT(&huart1,&test1[0],100); HAL_UART_Receive_DMA(&huart1,&test[0],100); HAL_UART_Transmit_DMA(&huart1,&test1[0],100); Вопросы по этим функциям. 1. Прерывание длится пока не будет получен весь массив или только один байт ? (решено, прерывание вызывается пока не будет получен весь массив, потом необходимо вызывать инициализировать заново) 1.1 Аналогично для режима DMA. 1.2 В режиме DMA можно включить кольцевой массив. Тогда достаточно инициализировать 1 раз, и данные всегда будут поступать в буфер. 2. Почему при приёме каждое новое слово дописывается в массив, а не перезаписывает его с 1 элемента ? (решено, см п 2.1) 2.1 Или это потому что слово меньше 100 байт, и пока он не получит все 100 байт он будет считать это продолжением передачи (решено, так и есть) 3. Для простой передачи данных во внешнее устройство правильнее использовать HAL_UART_Transmit_DMA ? (решено, да правильнее снижается нагрузка на CPU + появляются дополнительные удобства в виде кольцевого буфера и возможности только раз запустить функцию, возможно есть и другие) 4. Динные полученные через DMA, не являются атомарными: 4.1 Для прерываний ?(решено, атомарность 1 байт) 4.2 Для основной программы ?(решено, атомарность 1 байт) 5. Динные полученные через IT, не являются атомарными: 5.1 Для прерываний ? (решено, атомарность 1 байт) 5.2 Для основной программы ? (решено, атомарность 1 байт)
0
|
|
| 18.10.2016, 11:19 | |
|
Ответы с готовыми решениями:
47
STM32F103C8T6 HAL UART
Stm32f4 Uart Hal |
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
||
| 18.10.2016, 19:20 | ||
Что значит вызываются из прерывания ? То что их можно размещать только в обработчике прерывания ? Они сами генерируют прерывания ? В чём их смысл ? (Не надо объяснять на моём примере лучше на понятном где они нужны и работают)
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
|
|
| 18.10.2016, 19:40 | |
|
HAL вызывает эти функции из своих обработчиков прерывания.
Эти функции по дефолту ничего не делают и определены как WEAK, т.е. пользователь может их переопределить и вписать что-то свое. Если на пальцах: HAL при срабатывании прерывания его обработает какой-то там своей внутренней функцией, а потом еще вызовет одну из callback функций.
0
|
|
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
||
| 18.10.2016, 20:09 | ||
С прерыванием ясно, случилось, попал в функцию, запустил свой обработчик. А здесь пока непонятно.
0
|
||
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
||
| 18.10.2016, 20:21 | ||
С прерыванием ясно, случилось, попал в функцию, запустил свой обработчик. А здесь пока непонятно. Так тоже самое, но свой код помещаешь не в в обработчик прерывания, а колбек.
0
|
||
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
||
| 18.10.2016, 20:24 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
|||||||
| 18.10.2016, 20:28 | |||||||
Так нет же там специально выделено место что бы не тёрлось. Вот пример.
0
|
|||||||
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
|||||||
| 18.10.2016, 20:57 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
|||||||
| 18.10.2016, 21:16 | |||||||
При возникновении прерывания всегда вызывается обработчик. Но прерывание может быть вызвано несколькими различными событиями. Например, получен очередной байт, ошибка, и.т.д. (это описывается в описании конкретного колбека) Для более точной обработки используются колбеки. Это, скажу так, тот же оператор условия (if) но специфичный. - Вызывается только в прерывании. - Проверяет только условие под которое заточен. - Если условие случилось то выполняет свою обработку. -Область видимости совпадает с обработчиком прерываний. И как её добавить. Потому что там где она описана такой код. То есть там её править не надо.
0
|
|||||||
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
|||||||
| 18.10.2016, 22:01 | |||||||
При возникновении прерывания всегда вызывается обработчик. Но прерывание может быть вызвано несколькими различными событиями. Например, получен очередной байт, ошибка, и.т.д. (это описывается в описании конкретного колбека) Для более точной обработки используются колбеки. Это, скажу так, тот же оператор условия (if) но специфичный. - Вызывается только в прерывании. - Проверяет только условие под которое заточен. - Если условие случилось то выполняет свою обработку. -Область видимости совпадает с обработчиком прерываний. И как её добавить. Потому что там где она описана такой код. То есть там её править не надо.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 37
|
||
| 19.10.2016, 07:41 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 08.07.2016
Сообщений: 182
|
||||||||||||||||
| 19.10.2016, 08:54 | ||||||||||||||||
|
У меня всегда непредсказуемый снаружи запрос с переменным размером посылки и такие же переменные по размеру ответы.
Поэтому всегда прием по одному байту:
А с передачей проще (я же знаю размер своей посылки):
0
|
||||||||||||||||
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
||
| 19.10.2016, 09:03 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 24.08.2009
Сообщений: 3
|
||
| 19.10.2016, 09:29 | ||
Схема с маленькой ошибкой, как мне кажется. В случае вызыва прерывания по передачи вызывается TX..Callback, иначе RX..Calback. У автора схема всегда TX..Callback
0
|
||
|
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 37
|
||
| 19.10.2016, 10:03 | ||
Прерывание -> USORTn_IRQHomdler(); -> HAL_UART_IRQHomdler(); -> UART_EndTransmit_IT(); -> HAL_UART_TxCpltCallback();
0
|
||
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
|
| 19.10.2016, 10:18 | |
|
Я не понял схему.
Что за условие режим передачи ? Что за условие окончание передачи ? В функции обработки нет таких условий. Почему выполняются после обработчика ? А если я колбеки помещу внутрь обработчика? Или их вообще не надо никуда помещать? Схема создала только вопросы.
0
|
|
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
||
| 19.10.2016, 10:27 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 16.06.2016
Сообщений: 37
|
||||||
| 19.10.2016, 10:42 | ||||||
У меня складывается ощущение что вы совершенно не знакомы с текстом библиотеки HAL, там не такая уж и великая вложенность чтобы запутаться. И не забывайте, схему я делал на коленке лишь для визуализации, естественно она не совсем корректно выглядит, но смысл несёт верный. <Изображение удалено>
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
||
| 19.10.2016, 11:14 | ||
Но в случае прерывания вызывается и функция xxx_IRQHomdler и функция соответствующего колбека. В случае ошибки это будет xxx_ErrorCallback. Получается таякая последовательность. Программа. Прерывание. IRQHADLER. Callback. //соответствующий после IRQHadler. Программа. При написании своего колбека он тоже должен быть void (void) как IRQHadler ?
0
|
||
|
1 / 1 / 0
Регистрация: 10.09.2015
Сообщений: 171
|
||
| 19.10.2016, 11:21 | ||
Но в случае прерывания вызывается и функция xxx_IRQHomdler и функция соответствующего колбека. В случае ошибки это будет xxx_ErrorCallback. Получается таякая последовательность. Программа. Прерывание. IRQHADLER. Callback. //соответствующий после IRQHadler. Программа. При написании своего колбека он тоже должен быть void (void) как IRQHadler ? Нет, не правильно. Колбек записан в сам обработчик прерывания - посмотрите исходник обработчика и там увидите вызов колбека. TotSamiyMihotych представил сам обработчик в виде схемы (составил блок-схему обработчика прерывания), в ней видно, что колбек вызывается из обработчика. Колбеки это обычные функции и к прерываниям относятся только тем, что они из них вызываются - никакой нигии нет.
0
|
||
|
0 / 0 / 0
Регистрация: 20.09.2016
Сообщений: 162
|
|||||||
| 19.10.2016, 11:31 | |||||||
Вот полный код.
0
|
|||||||
| 19.10.2016, 11:31 | |
|
STM32F407 + HAL + UART правильное использование HAL и UART HAL UART, прошу совет
STM32 HAL прийом даних из UART Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|