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

 
 
> Как вы работаете с регистрами GPIOx_AFR?
allsettingsdone
сообщение Oct 20 2015, 08:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Как вы настраиваете альтернативные функции у GPIO с помощью регистров GPIOx_AFR (например при настройке USART1 на PA9, PA10 на STM32F407VG) ? В стандартном файле описания периферии (stm32f4xx.h) - нет информации и масок для работы с этим регистром. Просто высчитываете сами битовую маску и записываете в этот регистр готовое число?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Oct 20 2015, 08:56
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Типа того. Раньше для альтернативных функций конкретно перечисления создавал (typedef enum { AF_SYSTEM, AF_TIM1, AF_TIM2 = 1, AF_TIM3...), потом перестал.
CODE
/*! GPIO Mode Type */
typedef enum {
MD_IN, //!< Input *
MD_GO, //!< General purpose output
MD_AF, //!< Alternate function
MD_AN //!< Analog
} GPIO_MODE_t;

/*! GPIO Output Type */
typedef enum {
OT_PP, //!< Output push-pull*
OT_OD //!< Output open-drain
} GPIO_OTYPE_t;

/*! GPIO Output Speed Type */
typedef enum {
SP_LO, //!< 2 MHz Low speed *
SP_ME, //!< 10 MHz Medium speed
// 2 MHz
SP_HI = 3 //!< 50 MHz High speed
} GPIO_OSPEED_t;

/*! GPIO Pull-Up_Pull-Down Type */
typedef enum {
PL_NP, //!< No pull-up, pull-down *
PL_PU, //!< Pull-up
PL_PD //!< Pull-down
// Reserved
} GPIO_PUPD_t;

/*! GPIO Alternate Functions
The specific alternate function assignments for each pin are detailed in
the device datasheet */
typedef enum {
AF_00, //!< AF0 *
AF_01, //!< AF1
AF_02, //!< AF2
AF_03, //!< AF3
AF_04, //!< AF4
AF_05, //!< AF5
AF_06, //!< AF6
AF_07, //!< AF7
AF_08, //!< AF8
AF_09, //!< AF9
AF_10, //!< AF10
AF_11, //!< AF11
AF_12, //!< AF12
AF_13, //!< AF13
AF_14, //!< AF14
AF_15 //!< AF15
} GPIO_AFLH_t;

#define GPIO_CONF(PORT, \
MD00, OT00, SP00, PL00, AF00, \
MD01, OT01, SP01, PL01, AF01, \
MD02, OT02, SP02, PL02, AF02, \
MD03, OT03, SP03, PL03, AF03, \
MD04, OT04, SP04, PL04, AF04, \
MD05, OT05, SP05, PL05, AF05, \
MD06, OT06, SP06, PL06, AF06, \
MD07, OT07, SP07, PL07, AF07, \
MD08, OT08, SP08, PL08, AF08, \
MD09, OT09, SP09, PL09, AF09, \
MD10, OT10, SP10, PL10, AF10, \
MD11, OT11, SP11, PL11, AF11, \
MD12, OT12, SP12, PL12, AF12, \
MD13, OT13, SP13, PL13, AF13, \
MD14, OT14, SP14, PL14, AF14, \
MD15, OT15, SP15, PL15, AF15); \
GPIO##PORT->MODER = ( \
MD00 << 0 | MD01 << 2 | MD02 << 4 | MD03 << 6 | \
MD04 << 8 | MD05 << 10 | MD06 << 12 | MD07 << 14 | \
MD08 << 16 | MD09 << 18 | MD10 << 20 | MD11 << 22 | \
MD12 << 24 | MD13 << 26 | MD14 << 28 | (uint32_t)MD15 << 30); \
GPIO##PORT->OTYPER = ( \
OT00 << 0 | OT01 << 1 | OT02 << 2 | OT03 << 3 | \
OT04 << 4 | OT05 << 5 | OT06 << 6 | OT07 << 7 | \
OT08 << 8 | OT09 << 9 | OT10 << 10 | OT11 << 11 | \
OT12 << 12 | OT13 << 13 | OT14 << 14 | (uint32_t)OT15 << 15); \
GPIO##PORT->OSPEEDR = ( \
SP00 << 0 | SP01 << 2 | SP02 << 4 | SP03 << 6 | \
SP04 << 8 | SP05 << 10 | SP06 << 12 | SP07 << 14 | \
SP08 << 16 | SP09 << 18 | SP10 << 20 | SP11 << 22 | \
SP12 << 24 | SP13 << 26 | SP14 << 28 | (uint32_t)SP15 << 30); \
GPIO##PORT->PUPDR = ( \
PL00 << 0 | PL01 << 2 | PL02 << 4 | PL03 << 6 | \
PL04 << 8 | PL05 << 10 | PL06 << 12 | PL07 << 14 | \
PL08 << 16 | PL09 << 18 | PL10 << 20 | PL11 << 22 | \
PL12 << 24 | PL13 << 26 | PL14 << 28 | (uint32_t)PL15 << 30); \
GPIO##PORT->AFR[0] = ( \
AF00 << 0 | AF01 << 4 | AF02 << 8 | AF03 << 12 | \
AF04 << 16 | AF05 << 20 | AF06 << 24 | (uint32_t)AF07 << 28); \
GPIO##PORT->AFR[1] = ( \
AF08 << 0 | AF09 << 4 | AF10 << 8 | AF11 << 12 | \
AF12 << 16 | AF13 << 20 | AF14 << 24 | (uint32_t)AF15 << 28);
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- allsettingsdone   Как вы работаете с регистрами GPIOx_AFR?   Oct 20 2015, 08:11
- - Golikov A.   Некоторые пользуются для этого кубом, но путь наст...   Oct 20 2015, 08:15
|- - scifi   Цитата(Golikov A. @ Oct 20 2015, 11:15) п...   Oct 20 2015, 08:29
- - smalcom   SPL )   Oct 20 2015, 08:41
- - allsettingsdone   Как узнать число, которое нужно записать в AFRH9 и...   Oct 20 2015, 08:51
|- - ЯadiatoR   Цитата(allsettingsdone @ Oct 20 2015, 11...   Oct 20 2015, 09:24
- - Genadi Zawidowski   Или так... Код #define arm_stm32f30x_hardware_pi...   Oct 20 2015, 08:53
- - AlanDrakes   ИМХО, в Datasheet на STM32F407, страница 61, описа...   Oct 20 2015, 10:17
- - Golikov A.   ну и есть дефайн AF0-AF15, его надо использовать в...   Oct 20 2015, 11:23
- - Эдди   В opencm3 нужные макросы есть. И даже функции врод...   Oct 20 2015, 11:24
- - esaulenka   Цитата(allsettingsdone @ Oct 20 2015, 11...   Oct 21 2015, 11:44
- - Golikov A.   а как этот правильный путь поможет задать альтерна...   Oct 21 2015, 13:12
|- - AHTOXA   Цитата(Golikov A. @ Oct 21 2015, 18:12) а...   Oct 21 2015, 14:46
|- - esaulenka   Цитата(Golikov A. @ Oct 21 2015, 16:12) а...   Oct 22 2015, 06:22
|- - den_po   Цитата(esaulenka @ Oct 22 2015, 09:22) Ес...   Oct 27 2015, 08:03
|- - AHTOXA   Дам ссылку на уже упомянутую в этой теме мою библ...   Oct 27 2015, 08:57
- - Golikov A.   ну это так докопаться....   Oct 21 2015, 14:47
- - adnega   Инициализирую все выводы в одном месте init_GPIO()...   Oct 22 2015, 07:15
- - Alechek   Инициалиация в одном месте хорошо. Но иногда не пр...   Oct 26 2015, 08:52


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 03:01
Рейтинг@Mail.ru


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