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

 
 
> STM32F4 и HAL, Осваиваю Cortex4 от ST
mag
сообщение Jan 7 2015, 09:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 28-01-05
Из: Таганрог
Пользователь №: 2 280



Добрый день!

Приступил к освоению Cortex. Имеется KIT STM32F4DISCOVERY.
Первично, до заказа KIT, информация от ST, о их детище под названием HAL (и возможностях появляющихся ввиду его применения) порадовала (после 8 битных MCU). Но при "лобовом" столкновении, радость моя притаилась sm.gif.
При попытке написания своего проекта возникли вопросы. Не до конца понятно как же работать с HALом? Где найти недостающую информацию?
Поясню на примере:

Есть желание использовать таймер в режиме "Output compare mode". HAL содержи функцию инициализации таймера HAL_TIM_OC_Init(). Ей нужно передать указатель на структуру:

TIM_HandleTypeDef
Data Fields
TIM_TypeDef * Instance
TIM_Base_InitTypeDef Init
HAL_TIM_ActiveChannel Channel
DMA_HandleTypeDef * hdma
HAL_LockTypeDef Lock
__IO HAL_TIM_StateTypeDef State

TIM_Base_InitTypeDef
Data Fields
uint32_t Prescaler
uint32_t CounterMode
uint32_t Period
uint32_t ClockDivision
uint32_t RepetitionCounter

Структура сделана универсальной на все случаи. Какие поля необходимы в требуемом мне режиме? В документации на HAL поля структуры описаны крайне лаконично. Проведения параллелей с Reference manual stm32f4хх не всегда возможно. Из примеров, поставляемых с KIT видно, что далеко не все поля структур заполняются при настройке таймера.

Вообщем пока я не нашел "ключа" к HALу. Заниматься исследованием HALа методом проб и ошибок глупо; смотреть потроха функций HALа - больно трудоемко и непрактично.
Подскажите, как Вы работаете с HALом? Может я не нашел нужной pdf?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
scifi
сообщение Jan 7 2015, 10:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Я никогда эти "блюмблюатеки" не пользовал, поэтому предвзят. Но всё равно добавлю свои 5 копеек.
Вижу пользу от этих библиотек только в стандартных ситуациях: настроить тактирование, сконфигурировать пин и т.д. Реально можно сэкономить время, ИМХО.
Но таймер - это совсем другой случай. Учитывая все его режимы и возможности взаимодействия с другими таймерами, там наберётся примерно 100500 различных сценариев использования. Чем там может помочь какой-то HAL - ума не приложу. Скорее, он там будет мешать. В описании таймера фигурируют регистры, их и надо настраивать напрямую. Какая-то мутная надстройка над регистрами со своими глюками и без описания - бред какой-то, честное слово.
Go to the top of the page
 
+Quote Post
Corvus
сообщение Jan 7 2015, 11:05
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



Если настрой такой, что
Цитата
Какая-то мутная надстройка над регистрами со своими глюками и без описания - бред какой-то, честное слово.
, тогда путного ничего не выйдет.

А так, имён переменных и комментариев вполне достаточно, чтоб провести параллель с референсным мануалом. rolleyes.gif Как ни крути, а тенденции таковы, что железячное программирование, вслед за PC-шным становится всё более высокоуровневым и отвязывается от конкретного "железа". Контроллеры становятся всё сложнее, взаимозависимости выставления битиков всё менее очевидны. Пока что HAL для того же STM - это банальная обёртка, а впереди уже набор готовых функций и совершенствование автогенерации кода. Новый виток борьбы парадигм, после ассемблер - C. biggrin.gif

А волшебной pdf никакой нет.
Цитата
Какие поля необходимы в требуемом мне режиме?

Тут, что с HAL, что без, какая разница? Смотрите аппноуты от ST на применение того же таймера в нужном режиме.
Go to the top of the page
 
+Quote Post
mag
сообщение Jan 7 2015, 11:59
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 28-01-05
Из: Таганрог
Пользователь №: 2 280



Цитата(Corvus @ Jan 7 2015, 14:05) *
А так, имён переменных и комментариев вполне достаточно, чтоб провести параллель с референсным мануалом. rolleyes.gif
Тут, что с HAL, что без, какая разница? Смотрите аппноуты от ST на применение того же таймера в нужном режиме.


Corvus, нет, настрой "нормальный", без "мутности". Отказаться от HAL можно для случая когда все сам и долго и нудно. Если же хочется пользоваться готовыми и отлаженными вещами, что в терминологии ST названо middleware, то без HALа не пойдет дело.

А по поводу параллелей, давайте на моем примере разберем:

TIM_HandleTypeDef
Data Fields
TIM_TypeDef * Instance
TIM_Base_InitTypeDef Init
HAL_TIM_ActiveChannel Channel
DMA_HandleTypeDef * hdma
HAL_LockTypeDef Lock
__IO HAL_TIM_StateTypeDef State

TIM_Base_InitTypeDef
Data Fields
uint32_t Prescaler
uint32_t CounterMode
uint32_t Period
uint32_t ClockDivision
uint32_t RepetitionCounter

Вот что нужно и нужно ли писать в выделенные поля и нужно ли и если да то зачем писать значение в uint32_t Period?
Чтобы ответить на этот вопрос - пока вижу один путь - лезть в потроха HALа. Но мне кажется это не правильным (где же тогда скорость и удобство разработки; абстракция от аппаратуры?).

Цитата
Смотрите аппноуты от ST на применение того же таймера в нужном режиме
если не сложно - ссылочку (похоже я не все нашел).
Go to the top of the page
 
+Quote Post
Corvus
сообщение Jan 7 2015, 12:17
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 24-04-08
Из: Зеленоград
Пользователь №: 37 056



uint32_t Period, как видно из названия - период работы таймера.
Настройка DMA для "Output compare mode" вам не нужны.

Документация по таймерам
http://www.st.com/web/en/resource/technica.../DM00042534.pdf
в частности, OCR-mode на стр. 13
Там же
Цитата
For more details on using the timer in this mode, refer to the examples provided in the
STM32xx standard peripheral libraries, in the /Project/STM32xx_StdPeriph_Examples/
TIM/OC_Toggle, /OCActive and /OCInactive folders.


И всё же, советую залезть в "потроха". В stm32f4xx_tim.h ничего страшного нет, зато вполне понятные комментарии к структурам, их полям и возможным значениям.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 7 2015, 12:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Corvus @ Jan 7 2015, 14:05) *
Как ни крути, а тенденции таковы, что железячное программирование, вслед за PC-шным становится всё более высокоуровневым и отвязывается от конкретного "железа". Контроллеры становятся всё сложнее, взаимозависимости выставления битиков всё менее очевидны.

Занятный опус.
Но если спуститься с небес на землю, то таймер в STM32 - непростой зверь (что неудивительно, учитывая широкую функциональность). Каким таким образом какой-то HAL может сделать проще? Правильно - никаким, потому что вместе с упрощением уйдёт и часть функциональности. Остаётся сомнительная помощь в установке битов регистров. Сомнительная, потому что для этого достаточно иметь в заголовках дефайны с именами битов. Да и без этого меня совсем не напрягает, заглянув в мануал, расставить битики по местам. Зато при отладке есть полное понимание того, как это работает. И если вдруг что-то не работает, достаточно внимательно посмотреть на содержимое регистров, чтобы понять, что не так.
Go to the top of the page
 
+Quote Post
mag
сообщение Jan 7 2015, 13:20
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 28-01-05
Из: Таганрог
Пользователь №: 2 280



Corvus, попробую немножко конкретизировать мой вопрос - информации по теме как настроить таймер достаточно. Думаю, что даже ref manuala будет в самый раз. Я хотел бы найти минимально необходимое для понимания работы описание функций и структур HAL. Чтобы не гадать как оно там сделано и что конкретно делает функция. Степеней свободы много. Аппаратура как заметили - сложная. По этой причине и описание на "обертку" должно быть и быть однозначным для интерпретации.

Цитата(Corvus @ Jan 7 2015, 15:17) *
uint32_t Period, как видно из названия - период работы таймера.
Настройка DMA для "Output compare mode" вам не нужны.

sm.gif Да, период работы таймера, но зачем его нужно задавать для режима "Output compare mode". Можно предположить, конечно, что есть возможность еще и менять "базу" таймера. В этом случае работает Autoreload в регистр счетчика? Хоть да, хоть нет, но функция/ее переменные должна быть описана полноценно иначе как можно ее использовать?

Цитата
Документация по таймерам
http://www.st.com/web/en/resource/technica.../DM00042534.pdf
в частности, OCR-mode на стр. 13 Там же. Да, интересно, но опять же без учета HAL. Если речь о ручной конфигурации - то начинать надо с ref manual.


Цитата
И всё же, советую залезть в "потроха". В stm32f4xx_tim.h ничего страшного нет, зато вполне понятные комментарии к структурам, их полям и возможным значениям.

Залез:
/* Timer Output Compare functions **********************************************/
HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);
................

/**
* @brief TIM Time Base Handle Structure definition
*/
typedef struct
{
TIM_TypeDef *Instance; /*!< Register base address */
TIM_Base_InitTypeDef Init; /*!< TIM Time Base required parameters */
HAL_TIM_ActiveChannel Channel; /*!< Active channel */
DMA_HandleTypeDef *hdma[7]; /*!< DMA Handlers array
This array is accessed by a @ref DMA_Handle_index */
HAL_LockTypeDef Lock; /*!< Locking object */
__IO HAL_TIM_StateTypeDef State; /*!< TIM operation state */
}TIM_HandleTypeDef;

Ни больше ни меньше - столько же сколько и в описании на HAL drv.
Прошу прощения, но пока описания на HAL скупое.

Цитата(scifi @ Jan 7 2015, 15:50) *
Занятный опус.
Но если спуститься с небес на землю, то таймер в STM32 - непростой зверь (что неудивительно, учитывая широкую функциональность). Каким таким образом какой-то HAL может сделать проще? Правильно - никаким, потому что вместе с упрощением уйдёт и часть функциональности. Остаётся сомнительная помощь в установке битов регистров. Сомнительная, потому что для этого достаточно иметь в заголовках дефайны с именами битов. Да и без этого меня совсем не напрягает, заглянув в мануал, расставить битики по местам. Зато при отладке есть полное понимание того, как это работает. И если вдруг что-то не работает, достаточно внимательно посмотреть на содержимое регистров, чтобы понять, что не так.


scifi, зверь сложный. Но не всегда нужно выжать из него все sm.gif. Есть же и простые типовые задачи. В любом случае, речь не о том "ты за HAL или против HAL" sm.gif. Речь о истине - где почитать чтобы понять что же делает в своих потрохах HAL, и что этот самый HAL ждет от пользователя в качестве исходных данных. Пока ситуацию можно описать так - "пользователь, ты мне дай все что есть, а я там сам сделаю как смогу". При этом пользователю не дано чего -либо ожидать кроме HAL_StatusTypeDef.

http://www.eevblog.com/forum/microcontroll...xx-hal-drivers/ нашел аналогичную темку.

Сообщение отредактировал mag - Jan 7 2015, 13:36
Go to the top of the page
 
+Quote Post
EvgenWL
сообщение Jan 7 2015, 19:03
Сообщение #8


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

Группа: Участник
Сообщений: 88
Регистрация: 20-10-06
Из: Иваново
Пользователь №: 21 504



Цитата(mag @ Jan 7 2015, 12:47) *
Подскажите, как Вы работаете с HALом? Может я не нашел нужной pdf?

UM1725: Description of STM32F4xx HAL drivers смотрели?
Go to the top of the page
 
+Quote Post
mag
сообщение Jan 8 2015, 14:30
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 28-01-05
Из: Таганрог
Пользователь №: 2 280



Цитата(EvgenWL @ Jan 7 2015, 22:03) *


Конечно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:33
Рейтинг@Mail.ru


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