Easyelectronics.ru

Электроника для всех
Текущее время: 19 фев 2020, 13:28

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



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

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

Зарегистрирован: 05 дек 2017, 18:17
Сообщения: 216
Осваиваю понемногу 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
Сообщения: 4039
Если загляните в референс-мануал и посмотрите на структуру регистров 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
Сообщения: 216
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
Сообщения: 4039
GPIO_AFRL_AFSEL9_Pos - такой записи быть не может. Опять же, если откроете в мануале картинку со структурой регистра, вы это САМИ увидите.
И вообще, Cube писан индусами, и в том числе кубовский заголовочник на CMSIS так же писан индусами, оттого и такие непонятки и случаются.


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

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


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

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


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

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

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

_________________
Потоковая OS


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


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


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

Сейчас этот форум просматривают: serglg, Tester500


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

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

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