Easyelectronics.ru

Электроника для всех
Текущее время: 14 окт 2019, 04:38

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: STM32H7 CMSIS
СообщениеДобавлено: 12 апр 2019, 17:02 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 160
Осваиваю понемногу H7 на базе платы Nucleo.
CMSIS взял из cubeh7 с сайта ST. Там сам пакет + патч к нему отдельно.
И что-то какие-то странности в части GPIO:
1. Регистр BSRR в CMSIS описан из двух 16-битных, BSRRL и BSRRH
Код:
typedef struct
{
  __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
  __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
  __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
  __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
  __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
  __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
  __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
  __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
} GPIO_TypeDef;

Т.е. если раньше я делал просто GPIOB->BSRR = GPIO_BSRR_BS_14, то теперь надо пересчитать, какой именно будет 14 бит в Hi регистре. Зачем так не удобно?
В даташите это один регистр BSRR по смещению 0x18.
Я просто исправил в этом месте два uint16_t на один uin32_t, чтоб работало как раньше.

2. Регистр альтернативных функций. Ну понятно, что их два, и обращение к ним было:
Код:
GPIOB->AFR[0] |= (3 << GPIO_AFRL_AFSEL3_Pos);
GPIOB->AFR[1] |=(5 <<  GPIO_AFRL_AFSEL9_Pos);

И сразу видно номер AF в удобочитаемом виде и номер ноги.
Сейчас в CMSIS описаны так же два AFR[], но макросы для установки битов:
GPIO_AFRH_AFRL0 - GPIO_AFRH_AFRL7
GPIO_AFRH_AFRH0 - GPIO_AFRH_AFRH7

Т.е. для включения альтернативной функции на 8 ноге надо устанавливать бит в GPIO_AFRH_AFRH0.

Это я не верно концепцию понял, или они там наркоманы все?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32H7 CMSIS
СообщениеДобавлено: 12 апр 2019, 17:38 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3643
Если загляните в референс-мануал и посмотрите на структуру регистров AFR, то вы даже визуально быстро поймете концепцию и закономерность. Эта концепция уже давно используется. Математически выражается как
AF_x << (4 * Pin_x),
где AF_x - номер альтернативной ф-ции, Pin_x - номер пина в диапазоне 0...7. Для пинов с номерами от 8 до 15 вычитаем 8 и пишем в регистр AFR[1].
Спрашиваете, зачем так неудобно? Опять же, посмотрите на структуру регистров. В регистре всего 32 бита.
А про "неудобно" - знаете, как в армии говорят? "Неудобно спать стоя, остальное всё удобно".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32H7 CMSIS
СообщениеДобавлено: 12 апр 2019, 17:54 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 160
BusMaster писал(а):
Если загляните в референс-мануал и посмотрите на структуру регистров AFR, то вы даже визуально быстро поймете концепцию и закономерность. Эта концепция уже давно используется. Математически выражается как
AF_x << (4 * Pin_x),
где AF_x - номер альтернативной ф-ции, Pin_x - номер пина в диапазоне 0...7. Для пинов с номерами от 8 до 15 вычитаем 8 и пишем в регистр AFR[1].
Спрашиваете, зачем так неудобно? Опять же, посмотрите на структуру регистров. В регистре всего 32 бита.
А про "неудобно" - знаете, как в армии говорят? "Неудобно спать стоя, остальное всё удобно".


А что не так с тем, как раньше работало?
Я имею ввиду запись (5 << GPIO_AFRL_AFSEL9_Pos).
Есть какие-то причины, почему поменяли, или "ну вот теперь так и всё"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32H7 CMSIS
СообщениеДобавлено: 12 апр 2019, 18:10 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3643
GPIO_AFRL_AFSEL9_Pos - такой записи быть не может. Опять же, если откроете в мануале картинку со структурой регистра, вы это САМИ увидите.
И вообще, Cube писан индусами, и в том числе кубовский заголовочник на CMSIS так же писан индусами, оттого и такие непонятки и случаются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32H7 CMSIS
СообщениеДобавлено: 12 апр 2019, 18:25 
Заглядывает иногда

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 160
BusMaster писал(а):
И вообще, Cube писан индусами, и в том числе кубовский заголовочник на CMSIS так же писан индусами, оттого и такие непонятки и случаются.


Есть какой-то другой CMSIS, не из куба?

Да, конечно там опечатка, GPIO_AFRH_AFSEL9_Pos. Это было довольно удобно, и номер AF видно и номер пина.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32H7 CMSIS
СообщениеДобавлено: 13 апр 2019, 00:35 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 742
Sergey_spb писал(а):
какие-то странности в части GPIO:

Странности это описание битов регистров CAN, за такие портянки вообще убивать нужно.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB