Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как использовать кольцевой буфер на HAL у SPI slave
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
beard42
Доброго всем времени суток.

Помогите, пожалуйста, разобраться с STM32 в связке с HAL.
Есть плата с STM32F405 (Nucleo). Хочу настроить прием по SPI (в slave-режиме).
В кубе настроил все необходимое, сгенерировал код (IAR 7.60 Kickstarter).
Прием/передача отдельных байтов работает.
Теперь хочу добавить кольцевой буфер.

Как это лучше реализовать?

На первый взгляд можно организовать так:
1. Объявляем глобальные переменные tx, rx. Инициализируем и вызываем HAL_SPI_TransmitReceive_IT().
2. В обработчике прерывания SPI после вызова встроенного обработчика HAL, записываем принятый байт в буфер и опять вызываем HAL_SPI_TransmitReceive_IT().

Правильно ли я понял порядок работы с HAL? Или как-то по другому организовать?

А может вообще забить на HAL? Где тогда брать CMSIS для STM32?
AleksBak
Цитата(beard42 @ May 1 2016, 14:26) *
...
А может вообще забить на HAL? Где тогда брать CMSIS для STM32?

CMSIS для STM32 уже у Вас есть - куб ее сгенерировал и она в папках проекта есть. Ее использование через хедер stm32f4xx.h, который находится в директории проекта: ..\Drivers\CMSIS\Device\ST\STM32F4xx\Include. Т.е. фактически Вам уже ничего не надо делать в плане того что первоначально как-то настраивать контроллер и т.п. и сразу можете использовать в своем коде работу через CMSIS. На первом этапе так и можно поступать: настраиваете и делаете проект в Кубе, а потом экспериментируйте с работой периферии по Вашему особому алгоритму где-нибудь в майне и т.п. Так легче всего и правильнее т.к. замучаетесь разбираться с кубовским HAL-ом, его функциями, API и очень даже может быть, что вообще не заработает в нем так как Вы именно хотите. В кубе то что сделано, то как бы стандартное все. Самое главное - используя кубовский софт Вы так и не поймете как работает железо. Надеюсь помог я?
x893
1. Сделайте свой обработчик прерываний
2. Используйте HAL обработчик, но вручную закольцуйте его
beard42
Цитата(AleksBak @ May 1 2016, 17:07) *
CMSIS для STM32 уже у Вас есть - куб ее сгенерировал

А использование HAL при этом отключать (в настройках проекта определен USE_HAL_DRIVER)? Мне так кажетстя, что не обязательно.
Нужно ли следить за тем, чтобы CMSIS и HAL-части не пересекались? Судя по беглому взгляду на HAL, нужно.

Цитата(x893 @ May 1 2016, 19:35) *
1. Сделайте свой обработчик прерываний
2. Используйте HAL обработчик, но вручную закольцуйте его

Именно это я и хочу сделать. Вопрос: как это правильно делается? Куда вставлять обработку? Моя идея с дополнительными переменными мне как-то не очень нравится.
beard42
Немного разобрался.
Во-первых, добавление данных в буфер и рестарт приема в обработчике прерывания не работатет (точнее работает, только данные попадают в буфер дважды). Помог перенос обработки в Callback-функцию.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.