реклама на сайте
подробности

 
 
> Как использовать кольцевой буфер на HAL у SPI slave, STM32F4
beard42
сообщение May 1 2016, 10:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 18-11-12
Пользователь №: 74 448



Доброго всем времени суток.

Помогите, пожалуйста, разобраться с 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?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
AleksBak
сообщение May 1 2016, 15:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



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

CMSIS для STM32 уже у Вас есть - куб ее сгенерировал и она в папках проекта есть. Ее использование через хедер stm32f4xx.h, который находится в директории проекта: ..\Drivers\CMSIS\Device\ST\STM32F4xx\Include. Т.е. фактически Вам уже ничего не надо делать в плане того что первоначально как-то настраивать контроллер и т.п. и сразу можете использовать в своем коде работу через CMSIS. На первом этапе так и можно поступать: настраиваете и делаете проект в Кубе, а потом экспериментируйте с работой периферии по Вашему особому алгоритму где-нибудь в майне и т.п. Так легче всего и правильнее т.к. замучаетесь разбираться с кубовским HAL-ом, его функциями, API и очень даже может быть, что вообще не заработает в нем так как Вы именно хотите. В кубе то что сделано, то как бы стандартное все. Самое главное - используя кубовский софт Вы так и не поймете как работает железо. Надеюсь помог я?
Go to the top of the page
 
+Quote Post
x893
сообщение May 1 2016, 17:35
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



1. Сделайте свой обработчик прерываний
2. Используйте HAL обработчик, но вручную закольцуйте его
Go to the top of the page
 
+Quote Post
beard42
сообщение May 2 2016, 07:04
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 18-11-12
Пользователь №: 74 448



Цитата(AleksBak @ May 1 2016, 17:07) *
CMSIS для STM32 уже у Вас есть - куб ее сгенерировал

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

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

Именно это я и хочу сделать. Вопрос: как это правильно делается? Куда вставлять обработку? Моя идея с дополнительными переменными мне как-то не очень нравится.
Go to the top of the page
 
+Quote Post
beard42
сообщение May 2 2016, 14:23
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 18-11-12
Пользователь №: 74 448



Немного разобрался.
Во-первых, добавление данных в буфер и рестарт приема в обработчике прерывания не работатет (точнее работает, только данные попадают в буфер дважды). Помог перенос обработки в Callback-функцию.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 00:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01643 секунд с 7
ELECTRONIX ©2004-2016