Ene rgb hal что это

Описание драйверов HAL STM32F4xx, частичный перевод

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
Делюсь небольшой проделанной работой — это частичный перевод оригинального описания

HAL разработан для применения такой архитектуры программирования, когда необходимые функции выполняются верхним слоем приложения, за счет применения промежуточного уровня HAL. При такой архитектуре программирования верхний уровень приложения не «привязан» к микроконтроллеру (МК), т.к обращается к ресурсам МК только через библиотеку драйверов HAL. Такая структура пользовательского приложения улучшает повторное использование кода, и гарантирует его легкую переносимость на другие устройства STM32.

Драйверы HAL предоставляют полный набор готовых к использованию API, которые упрощают реализацию пользовательского приложения. В качестве примера — встроенные устройства коммуникации (связи) содержат интерфейсы API для инициализации и настройки устройства, управления передачей данных на основе опроса, в прерываниях или через DMA, а так же для управления ошибками связи.

API-интерфейсы драйверов HAL, делятся на две категории: 1) Общие (generic) API, которые обеспечивают общие, для всех серий STM32, функции. 2) Расширенные (extension) API, которые содержат специфические или индивидуальные функции для данного семейства или его части.

Драйверы HAL являются функционально-ориентированными, а не ориентированны на внутренние периферийные устройства. Например, API таймера делится на несколько категорий, по функциям, предоставляемым внутренним устройством таймера: базовый таймер (basic timer), захвата (capture), широтно-импульсной модуляции (PWM), и т.д…

Исходный код библиотеки драйверов разработан в соответствии со Strict ANSI-C, что делает код независимым от инструментов разработки. Весь исходный код проверен с помощью инструмента статистического анализа CodeSonarTM, полностью документирован и является MISRA-C 2004 совместимым.

Драйверы слоя HAL реализуют обнаружение ошибок во время выполнения (run-time failure detection), HAL проверяет входные значения всех функций. Такая динамическая проверка способствует повышению надежности встроенного ПО. Обнаружение ошибок во время выполнения программы, также, способствует ускорению разработки пользовательских приложений и процесса отладки.

Далее — в приложенном файле

Сразу скажу, что переведена, фактически, только 2 глава, в которой описано, как устроен HAL. Старался перевести максимально «корректно», а как получилось…
Если кем-то будут замечены ляпусы — исправлю.
Обсуждение на форуме

Источник

Thread: Armoury crate v3.1.5.0 / v3.1.6.0 [report here if any issues]

Thread Tools
Search Thread
Display

ROG Member Array Monkeyman7890 PC Specs

Monkeyman7890 PC Specs
Laptop (Model)N/A
MotherboardPrime X570-Pro
ProcessorRyzen 3900X
Memory (part number)F4-3200C16D-16GTZR
Graphics Card #1ASUS ROG STRIX 2080 Super
CPU CoolerCOOLER MASTER MASTERLIQUID ML360R RGB
OSWindows 10

Join Date Aug 2020 Reputation 10 Posts 8

Inside of the ENE folder I have two folders:

Both of those contain a x64 and x86 each with two dlls inside but there is no folder named Aac_ENE RGB HAL in Program Files\ENE. Searching my PC I have a ENE\Aac_ENE RGB HAL folder inside Window’s Temp folder but it is empty.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

ROG Guru: Green Belt Array geneo PC Specs

geneo PC Specs
MotherboardROG Maximus XII Hero (WiFi)
Processori9-10900k 5.1Ghz AVX0, delid
Memory (part number)64 GB G.Skill TridentZ RGB 3200/CL14 @ 3600 CL16
Graphics Card #1Asus ROG Strix 2070 Super A8G
Sound CardOn-board
MonitorEIZO Coloredge CG2730 and Viewsonic QHD displays
Storage #1Samsung 512 GB 960 Pro; 980 1TB
Storage #21TB 850 x 1 TB 860 EVO RAID0, 6 TB WDC Black, 6TB IronWolf Pro
CPU CoolerEK-AIO 360 D-RGB w/Phanteks 120 T30 fan, 2 Noctua Chromax case fanss
CaseFractal Design Meshify 2 dark tint
Power Supply750W Seasonic Prime Ultra Titanium Plus
KeyboardGlorious GMMK TKL
MouseLogitech G305
HeadsetBose QC15
Mouse PadPerixx dx-2000
Headset/SpeakersVanatoo T1, Klipsch R-12SWi Sub
OSWindows 11 Pro X64
Network RouterLinksys EA7300
Accessory #1Logitech c920e webcam
Accessory #2Sabrent DS-SC5B 5-Bay USB-C HDD docking station
Accessory #3xrite i1 Display monitor calibration

Join Date Feb 2014 Reputation 52 Posts 569

Inside of the ENE folder I have two folders:

Both of those contain a x64 and x86 each with two dlls inside but there is no folder named Aac_ENE RGB HAL in Program Files\ENE. Searching my PC I have a ENE\Aac_ENE RGB HAL folder inside Window’s Temp folder but it is empty.

Well I attached my ENE folder. Maybe you could try renaming your current ENE to something else, then plopping this in its place, and performing a reboot. Maybe it will pick it up. If not, undo it.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

ROG Member Array Monkeyman7890 PC Specs

Monkeyman7890 PC Specs
Laptop (Model)N/A
MotherboardPrime X570-Pro
ProcessorRyzen 3900X
Memory (part number)F4-3200C16D-16GTZR
Graphics Card #1ASUS ROG STRIX 2080 Super
CPU CoolerCOOLER MASTER MASTERLIQUID ML360R RGB
OSWindows 10

Join Date Aug 2020 Reputation 10 Posts 8

Just tried it and it did not do anything. But thank you for trying to help. Any other suggestions? If not I guess I’ll just wait for the next update and hope that fixes it.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

ROG Guru: Green Belt Array geneo PC Specs

geneo PC Specs
MotherboardROG Maximus XII Hero (WiFi)
Processori9-10900k 5.1Ghz AVX0, delid
Memory (part number)64 GB G.Skill TridentZ RGB 3200/CL14 @ 3600 CL16
Graphics Card #1Asus ROG Strix 2070 Super A8G
Sound CardOn-board
MonitorEIZO Coloredge CG2730 and Viewsonic QHD displays
Storage #1Samsung 512 GB 960 Pro; 980 1TB
Storage #21TB 850 x 1 TB 860 EVO RAID0, 6 TB WDC Black, 6TB IronWolf Pro
CPU CoolerEK-AIO 360 D-RGB w/Phanteks 120 T30 fan, 2 Noctua Chromax case fanss
CaseFractal Design Meshify 2 dark tint
Power Supply750W Seasonic Prime Ultra Titanium Plus
KeyboardGlorious GMMK TKL
MouseLogitech G305
HeadsetBose QC15
Mouse PadPerixx dx-2000
Headset/SpeakersVanatoo T1, Klipsch R-12SWi Sub
OSWindows 11 Pro X64
Network RouterLinksys EA7300
Accessory #1Logitech c920e webcam
Accessory #2Sabrent DS-SC5B 5-Bay USB-C HDD docking station
Accessory #3xrite i1 Display monitor calibration

Join Date Feb 2014 Reputation 52 Posts 569

Well, what I would do is uninstall crate and associated software, blow away the ENE folder, and reinstall it. I had similar problems with crate retaining outdated HAL files, RAM and MB not recognized.

But I had a good system backup to fall back on. The install and uninstall for this software is atrocious.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Can someone tell me what version of the software this installs and any release notes? I won’t be installing something blind again.

No version number and a date of 2020/10/14. The software itself doesn’t show any updates when I check in Armoury Crate.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Can someone tell me what version of the software this installs and any release notes? I won’t be installing something blind again.

No version number and a date of 2020/10/14. The software itself doesn’t show any updates when I check in Armoury Crate.

Did anyone find out which version this is? I have been having problem since latest updates where Fn key shortcuts stop working. It’s really annoying since I can’t control RGB keyboard at all.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

The new installer is only to resolve some issues people encounter when installing, also includes the option to install Aura Creator as well. This this not a software update.

Check if you have the latest service updates:
Armoury Crate UWP App 3.1.6.0
ROG Live Service 1.1.6.0
AURA Service (Lighting Service) 3.04.22
Armoury Crate service 3.1.5
ASUS Aac_NBDT HAL 2.4.2.0

These service updates install automatically as background processes which may be the cause of higher CPU usage. I also see that you have an impressive collection of Aura Sync compatible hardware including the RGB headset stand and mouse pad. The more you connect, the more resources are required. However, considering the caliber of your laptop, the CPU usage should stay under 10% under normal circumstances.

Can someone tell me what version of the software this installs and any release notes? I won’t be installing something blind again.

No version number and a date of 2020/10/14. The software itself doesn’t show any updates when I check in Armoury Crate.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

The new installer is only to resolve some issues people encounter when installing, also includes the option to install Aura Creator as well. This this not a software update.

Check if you have the latest service updates:
Armoury Crate UWP App 3.1.6.0
ROG Live Service 1.1.6.0
AURA Service (Lighting Service) 3.04.22
Armoury Crate service 3.1.5
ASUS Aac_NBDT HAL 2.4.2.0

These service updates install automatically as background processes which may be the cause of higher CPU usage. I also see that you have an impressive collection of Aura Sync compatible hardware including the RGB headset stand and mouse pad. The more you connect, the more resources are required. However, considering the caliber of your laptop, the CPU usage should stay under 10% under normal circumstances.

The cpu usage was definitely not normal. After a series of troubleshooting, I no longer experience the service helper cpu resource issue. However, my system interface driver issue persists and I have to keep 2.2.27.0 installed. Anything newer, the armory crate service fails to autorun on boot up.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

The new installer is only to resolve some issues people encounter when installing, also includes the option to install Aura Creator as well. This this not a software update.

Check if you have the latest service updates:
Armoury Crate UWP App 3.1.6.0
ROG Live Service 1.1.6.0
AURA Service (Lighting Service) 3.04.22
Armoury Crate service 3.1.5
ASUS Aac_NBDT HAL 2.4.2.0

These service updates install automatically as background processes which may be the cause of higher CPU usage. I also see that you have an impressive collection of Aura Sync compatible hardware including the RGB headset stand and mouse pad. The more you connect, the more resources are required. However, considering the caliber of your laptop, the CPU usage should stay under 10% under normal circumstances.

Oh also, Armoury Crate UWP isn’t updating itself to 3.1.6. Is there something I can do to move this along?

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что этоMiniatura de Adjuntos

Источник

HAL stm32

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

HAL (Hardware Abstraction Layer) — это библиотека для создания приложений на stm32, разработанная компанией ST в 2014 году. HAL пришёл на смену SPL.

Заранее скажу, что эта статья никакой не мануал, это просто попытка описать внутреннее устройство HAL, ну или можно сказать, что это метод изучения сабжа.

Итак, HAL позволяет абстрагироваться от работы с регистрами и прочей сложной магии. Грубо говоря, HAL это обёртка над низкоуровневыми операциями. Конечно же это не отменяет необходимости понимания устройства микроконтроллеров, но значительно снижает уровень вхождения.

Например, чтоб запустить таймер, достаточно перед бесконечным циклом прописать вот такую функцию…

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

Сама функция выглядит так:

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Вначале происходит проверка параметров на ошибки (assert_param), и после этого активируется прерывание и запускается таймер.

Однако я немного забежал вперёд. Прежде чем изучать HAL, нужно познакомиться с программой CubeMX (в просторечии «Куб») так как HAL является неотъемлемой частью «Куба», и именно в нём генерится весь начальный код будущего приложения включая описанные выше функции. Подробно про CubeMX читайте здесь.

Познакомились — тогда продолжим…

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

Итак мы сгенерировали проект, в котором есть таймер вызывающий прерывание при переполнении, и GPIO. Открываем этот проект в среде разработки (у меня TrueStudio) и в левой панели клацаем файл main.c…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Куб создал все необходимые функции инициализации…

void SystemClock_Config(void) — инициализация тактирования.
static void MX_TIM1_Init(void) — инициализация таймера.
static void MX_GPIO_Init(void) — инициализация GPIO.

… и избавил нас от возни с настройками, и от возможных ошибок.

Все функции типичны — параметры записываются в структуры, и адреса этих структур передаются в соответствующие HAL-функции. Каждая функция возвращает статус. Если возвращается ошибка, то вызывается функция Error_Handler() находящаяся в самом низу. В эту функцию хорошо бы прописать что-то, что сигнализировало бы об ошибке, например мигнуть лампочкой.

В конце файла обрисован механизм передачи assert_param() в void assert_failed()…

Если хотите чтоб он раскомментировался, то надо в Кубе сделать так…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
Enable Full Assert. Эти ассерты занимают определённое количество памяти, поэтому их лучше использовать только для отладки, а в релизе отключать.

В общем с проверками на ошибки у HAL’а всё очень удобно и информативно.

Теперь давайте рассмотрим процесс инициализации на примере таймера.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Здесь происходит следующее:

Проверяется не пустой ли указатель структуры (htim == NULL) и заполнены ли все элементы структуры (assert_param).

Проверяется статус таймера (htim->State == HAL_TIM_STATE_RESET). В данном случае статус HAL_TIM_STATE_RESET говорит о том, что устройство еще не инициализировано или отключено.

Если статус удовлетворяет, то снимается блокировка (htim->Lock = HAL_UNLOCKED) и вызывается функция HAL_TIM_Base_MspInit(htim) …

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Здесь проверяется какой именно таймер настраивается (htim_base->Instance==TIM1) и вызываются функции которые включают тактирование таймера, активирует прерывание и настраивают приоритет.

Далее устанавливается статус «занято» (htim->State= HAL_TIM_STATE_BUSY) — если по каким-то причинам, параллельно будет вызвана ещё одна функция инициализации таймера, то она не сможет ничего испортить.

После этого вызывается функция TIM_Base_SetConfig(htim->Instance, &htim->Init) (у этой функции нет приставки HAL, поэтому можно назвать её низкоуровневой) работающая напрямую с регистрами…

Ну и наконец устанавливается статус «готов к труду и обороне» (htim->State= HAL_TIM_STATE_READY) и возвращается — return HAL_OK;

Все функции имеют характерные названия определяющие их назначение…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Окончание _IT означает, что устройство будет вызывать прерывание. Это относится к любым функциям используемым в HAL.

Например запуск таймера без прерываний выглядит так:

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

При работе с любой другой периферией, все необходимые функции вы найдёте в соответствующих файлах…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Названия файлов говорят сами за себя.

Функция запуска таймера…

… сама по себе не особо интересна.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Функция устанавливает бит разрешающий прерывания по переполнению — __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE) и бит активации таймера — __HAL_TIM_ENABLE(htim).

А вот механизм вызова прерывания поможет понять устройство библиотеки HAL. Разберём его…

Когда мы в Кубе активируем прерывание от какой-либо периферии, то в файле stm32f1xx_it.c автоматически создаётся обработчик с соответствующим именем…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
Сюда программа переходит как только сработает прерывание от любого из событий таймера №1.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Программа войдя в функцию HAL_TIM_IRQHandler проверяет какой из флагов был установлен и найдя нужный блок выполняет его содержимое.

Нас интересует блок TIM Update event…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Библиотека HAL под завязку напичкана различными макросами. Как уже говорилось в начале статьи, они начинаются с __двойного подчёркивания и имеют характерные имена определяющие их назначение. Эти макросы очёнь клёвая штука, они позволяют оперировать различными битами в различных регистрах без необходимости копаться в даташитах.

Внутри макроса __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE) содержится вот такая конструкция…

Этот макрос сбрасывает бит (указанный вторым аргументом) в регистре состояния (Status Register).

В первый аргумент подставляется указатель на структуру таймера, а вторым аргументом идёт дефаин флага который взводится при возникновении прерывания…

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

Колбек это характерная фишка HAL’а. В колбеках выполняются действия которые нужно сделать при возникновении события/прерывания, в нашем случае мы будем мигать лампочкой.

В принципе нам ничто не мешает мигать лампочкой прямо в обработчике, да ещё и оперировать регистрами напрямую (немного хардкора)

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
В этом примере делается то же самое, что делает HAL — сбрасывается флаг прерывания и вместо вызова колбека сразу же выполняется действие (мигание светиком).

Таким образом количество кода сократилось бы в разы, но не было бы никаких проверок, и в любом случае нужно было бы самостоятельно писать проверку — какое именно событие случилось (если бы их было несколько). Тем не менее, в дальнейшем, когда хорошенько прокачаетесь, будете потихонечку переходить на работу с регистрами.

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

Находим нужный нам колбек…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

… и переопределяем его в файл main.c

Проверяем что прерывание пришло от таймера №1 и мигаем светиком.

Проверять от какого таймера пришло прерывание нужно в том случае, если используется несколько таймеров. Тут дело вот в чём: если мы настроим ещё один таймер, например №2, и он тоже будет вызывать прерывания, тогда в файле stm32f1xx_it.c появится второй обработчик…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Не смотря на то, что обработчиков два, функция HAL_TIM_IRQHandler() одна и та же. Соответственно и колбек будет вызываться один и тот же. Поэтому для двух таймеров нужно делать так…

Это касается не только таймеров, но и прочей периферии — USART, SPI, I2C и т.д.

Рассмотрим работу USART’а с DMA, там механизм несколько сложнее чем с таймером. В Кубе настройте USART с использованием DMA на приём…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Инициализация USART’а точно такая же как и у таймера…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
Параметры загружаются в структуру и передаются в функцию.

Команда запуска опять же схожа с таймером (передаётся структура + доп. аргументы)

Первый аргумент это адрес структуры, второй — это адрес массива в который будут складываться полученные данные, третий — это количество байт которые нужно принять.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Здесь у нас много чего интересненького.

В первую очередь происходит проверка — занят USART или нет (HAL_UART_STATE_READY).

Если до этого функция уже запускалась и данные ещё не получены, то эта проверка не пройдёт и функция вернёт статус «занято» (return HAL_BUSY). Если же необходимо перезапустить функцию, то предварительно надо вызвать — HAL_UART_AbortReceive(&huart1). Как видите названия функций говорят сами за себя.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Следом идёт запуск DMA — HAL_DMA_Start_IT() …

В функцию передаётся: указатель на структуру, источник данных (в нашем случае это регистр данных (DR) USART’а), получатель данных (адрес буфера), и ожидаемое кол-во байт.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Если элемент структуры hdma->XferHalfCpltCallback не пустой, то разрешаются прерывания по заполнению буфера полностью (DMA_IT_TC), по заполнению буфера наполовину (DMA_IT_HT), и при ошибке (DMA_IT_TE). Если нам не нужно отслеживать заполнение половины буфера, то надо в huart->hdmarx->XferHalfCpltCallback записать NULL.

На этом функция HAL_UART_Receive_DMA(&huart1, (uint8_t*)rx_buff, BUFSIZE) закончена.

Низкоуровневый обработчик прерываний от DMA выглядит так же как и в случае с таймером…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

… вызывает HAL-обработчик HAL_DMA_IRQHandler(&hdma_usart1_rx);

И опять же как и у таймера, функция состоит из нескольких блоков. Первый блок срабатывает при заполнении половинки буфера, второй — целиком, а третий при ошибке. Для примера рассмотрим блок полного буфера…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Проверяются флаги полного буфера (DMA_FLAG_TC1) и разрешённого прерывания (DMA_IT_TC).

Блокировка организована очень просто…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Такая вот хитроумная конструкция Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Если приём ведётся без DMA…

Тогда после включения глобального прерывания USART’а появится его обработчик…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Следом проверяется счётчик принятых байт — RxXferCount (он считает «вниз» от максимального значения буфера), и если он равен нулю (то есть приняты все запрошенные данные), то вызывается колбек — HAL_UART_RxCpltCallback(huart);

В завершение хочется рассказать про копирование через DMA. Для этого режима у DMA есть механизм создания колбеков.

Настроим Куб для копирование массива из одной области памяти в другую при помощи DMA…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
Длина слова указана Word (32 бита), то есть копироваться будет по четыре байта за один такт.

Функция регистрации колбека…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

В функцию передаются три аргумента:

1. Указатель на структуру.
2. Ключ, по которому определяется какое событие должно вызвать колбек — скопирован весь буфер, скопирована половина буфера и т.д.

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это
В нашем случае указан полный буфер — HAL_DMA_XFER_CPLT_CB_ID.

3. Название колбека. Придумайте сами.

Функция запуска копирования…

Аргументы: указатель на структуру, массив из которого копируется, массив в который копируется, количество байт (ячейки массива 8-ми битные, а DMA будет копировать по 32 бита за раз).

Содержимое этой функции поизучайте самостоятельно, вы уже всё знаете Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

По окончанию копирования произойдёт прерывание и будет вызван обработчик…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

В функции HAL_DMA_IRQHandler() прописан такой же механизм как и в случае с USART’ом — несколько блоков отвечающих за каждое событие (полный буфер, половинка и т.д.) и вот это…

Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Элемент структуры hdma->XferCpltCallback был заполнен во время регистрации колбека.

На этом наверно всё.

Всем спасибо Ene rgb hal что это. Смотреть фото Ene rgb hal что это. Смотреть картинку Ene rgb hal что это. Картинка про Ene rgb hal что это. Фото Ene rgb hal что это

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *