Datasheet fom st.com
STM32F103xC, STM32F103xB - техническое описание, цоколевка, характеристики, обзор, схемы подключения, габариты (CD00161566)
STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx - справочное руководство, описание структуры и регистров( RM0008)
Режимы работы портов GPIO
la porta&0×01
Управление портами STM32 осуществляется при помощи наборов из семи 32-разрядных регистров:
GPIOx_CRL, GPIOx_CRH – задают режимы работы каждого из битов порта в качестве входа или выхода, определяют конфигурацию входных и выходных каскадов.
GPIOx_IDR – входной регистр данных для чтения физического состояния выводов порта x.
GPIOx_ODR– выходной регистр осуществляет запись данных непосредственно в порт.
GPIOx_BSRR – регистр атомарного сброса и установки битов порта.
GPIOx_BSR – регистр сброса битов порта.
GPIOx_LCKR – регистр блокировки конфигурации выводов.
Для включения в работу порта x необходимо предварительно подключить его к шине APB2 установкой соответствующего бита IOPxEN в регистре разрешения тактирования периферийных блоков RCC_APB2ENR:
RCC->APB2ENR |= RCC_APB2ENR_IOPxEN; // Разрешить тактирование PORTx.
Режимы работы отдельных выводов определяются комбинацией битов MODEy[1:0] и CNFy [1:0] регистров GPIOx_CRL и GPIOx_CRH (здесь и далее: x-имя порта, y- номер бита порта).
GPIOx_CRL — регистр конфигурации выводов 0…7 порта x:
Структура регистра GPIOx_CRH аналогична структуре GPIOx_CRL и предназначена для управления режимами работы старших выводов порта (биты 8…15).
Биты MODEy указанных регистров определяют направление вывода и ограничение скорости переключения в режиме выхода:
MODEy[1:0] = 00: Режим входа (состояние после сброса);
MODEy[1:0] = 01: Режим выхода, максимальная скорость – 10МГц;
MODEy[1:0] = 10: Режим выхода, максимальная скорость – 2МГц;
MODEy[1:0] = 11: Режим выхода, максимальная скорость – 50МГц.
Биты CNF задают конфигурацию выходных каскадов соответствующих выводов:
в режиме входа:
CNFy[1:0] = 00: Аналоговый вход;
CNFy[1:0] = 01: Вход в третьем состоянии (состояние после сброса);
CNFy[1:0] = 10: Вход с притягивающим резистором pull-up (если PxODR=1) или pull-down (если PxODR=0);
CNFy[1:0] = 11: Зарезервировано.
в режиме выхода:
CNFy[1:0] = 00: Двухтактный выход общего назначения;
CNFy[1:0] = 01: Выход с открытым стоком общего назначения;
CNFy[1:0] = 10: Двухтактный выход с альтернативной функцией;
CNFy[1:0] = 11: Выход с открытым стоком с альтернативной функцией.
С целью повышения помехоустойчивости все входные буферы содержат в своём составе триггеры Шмидта. Часть выводов STM32, снабженных защитными диодами, соединёнными с общей шиной и шиной питания, помечены в datasheet как FT (5V tolerant) — совместимые с напряжением 5 вольт.
* 0 - Аналоговый ввод.
* 1 - Вывод Push Pull на 10 МГц.
* 2 - Вывод Push Pull на 2 МГц.
* 3 - Вывод Push Pull на 50 МГц.
* 4 - Цифровой вход.
* 5 - Вывод Open Drain на 10 МГц.
* 6 - Вывод Open Drain на 2 МГц.
* 7 - Вывод Open Drain на 50 МГц.
* 8 - Цифровой вход с подтяжкой в зависимости от значения в ODR.
* 9 - Альтернативный вывод Push Pull на 10 МГц от периферии.
* A - Альтернативный вывод Push Pull на 2 МГц от периферии.
* B - Альтернативный вывод Push Pull на 50 МГц от периферии.
* C - Зарезервировано.
* D - Альтернативный вывод Open Drain на 10 МГц от периферии.
* E - Альтернативный вывод Open Drain на 2 МГц от периферии.
* F - Альтернативный вывод Open Drain на 50 МГц от периферии.
typedef enum Configuration
{
PortAnalogIn = 0,
PortIn = 0x04,
PortPullUpOrDownIn = 0x08,
PortOut = 0x03, // default Out is Out50Mhz
PortOut10Mhz = 0x01,
PortOut2Mhz = 0x02,
PortOut50Mhz = 0x03,
PortOpenDrainOut = 0x07,
PortOpenDrainOut10Mhz = 0x05,
PortOpenDrainOut2Mhz = 0x06,
PortOpenDrainOut50Mhz = 0x07,
PortAltOut = 0x0B,
PortAltOut10Mhz = 0x09,
PortAltOut2Mhz = 0x0A,
PortAltOut50Mhz = 0x0B,
PortAltOpenDrain = 0x0f,
PortAltOpenDrain10Mhz = 0x0C,
PortAltOpenDrain2Mhz = 0x0E,
PortAltOpenDrain50Mhz = 0x0f
} port_configuration_t;
Запись и чтение GPIO
Для записи и чтения портов предназначены входной GPIOx_IDR и выходной GPIOx_ODR регистры данных.
Запись в выходной регистр ODR порта настроенного на вывод осуществляет установку выходных уровней всех разрядов порта в соответствии с записываемым значением. Если вывод настроен как вход с подтягивающими резисторами, состояние соответствующего бита регистра ODR активирует подтяжку вывода к шине питания (pull-up, ODR=1) или общей шине микроконтроллера (pull-down, ODR=0).
Чтение регистра IDR возвращает значение состояния выводов микроконтроллера настроенных как входы:
// Если кнопка нажата (PA0=1), установить биты порта C, иначе сбросить.
if (GPIOA->IDR & GPIO_IDR_IDR0) GPIOC->ODR=0xFFFF; else GPIOC->ODR=0x0000;
Сброс и установка битов порта
Для атомарного сброса и установки битов GPIO в микроконтроллерах STM32 предназначен регистр GPIOx_BSRR. Традиционный для архитектуры ARM способ управления битами регистров не требующий применения операции типа «чтение-модификация-запись” позволяет устанавливать и сбрасывать биты порта простой записью единицы в биты установки BS (BitSet) и сброса BR (BitReset) регистра BSRR. При этом запись в регистр нулевых битов не оказывает влияния на состояние соответствующих выводов.
GPIOx_BSRR – регистр сброса и установки битов порта:
GPIOC->BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BR9; // Зажечь LED4 (PC8), погасить LED3.
GPIOC->BSRR=GPIO_BSRR_BS9|GPIO_BSRR_BR8; // Зажечь LED3 (PC9), погасить LED4.
Альтернативные функции GPIO и их переназначение (remapping)
Практически все внешние цепи специального назначения STM32 (включая выводы для подключения кварцевых резонаторов, JTAG/SWD и так далее) могут быть разрешены на соответствующих выводах микроконтроллера, либо отключены от них для возможности их использования в качестве выводов общего назначения. Выбор альтернативной функции вывода осуществляется при помощи регистров с префиксом «AFIO_”.
Помимо этого регистры AFIO_ позволяют выбирать несколько вариантов расположения специальных функций на выводах микроконтроллера. Это в частности относится к выводам коммуникационных интерфейсов, таймеров (регистры AFIO_MAPR), выводам внешних прерываний (регистры AFIO_EXTICR) и т. д.
STM32F103xC, STM32F103xB - техническое описание, цоколевка, характеристики, обзор, схемы подключения, габариты (CD00161566)
STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx, STM32F107xx - справочное руководство, описание структуры и регистров( RM0008)
Standard Peripheral Library
stm32f10x_gpio.h stm32f10x_gpio.c - GPIO_InitTypeDef (GPIO_PIN, GPIO_Speed, GPIO_Mode)
stm32f10x_rcc.c и stm32f10x_rcc.h. - тактирование
Режимы работы портов GPIO
- Input floating
- Input pull-up
- Input-pull-down
- Analog
- Output open-drain
- Output push-pull
- Alternate function push-pull
- Alternate function open-drain
la porta&0×01
Управление портами STM32 осуществляется при помощи наборов из семи 32-разрядных регистров:
GPIOx_CRL, GPIOx_CRH – задают режимы работы каждого из битов порта в качестве входа или выхода, определяют конфигурацию входных и выходных каскадов.
GPIOx_IDR – входной регистр данных для чтения физического состояния выводов порта x.
GPIOx_ODR– выходной регистр осуществляет запись данных непосредственно в порт.
GPIOx_BSRR – регистр атомарного сброса и установки битов порта.
GPIOx_BSR – регистр сброса битов порта.
GPIOx_LCKR – регистр блокировки конфигурации выводов.
Для включения в работу порта x необходимо предварительно подключить его к шине APB2 установкой соответствующего бита IOPxEN в регистре разрешения тактирования периферийных блоков RCC_APB2ENR:
RCC->APB2ENR |= RCC_APB2ENR_IOPxEN; // Разрешить тактирование PORTx.
Режимы работы отдельных выводов определяются комбинацией битов MODEy[1:0] и CNFy [1:0] регистров GPIOx_CRL и GPIOx_CRH (здесь и далее: x-имя порта, y- номер бита порта).
GPIOx_CRL — регистр конфигурации выводов 0…7 порта x:
Структура регистра GPIOx_CRH аналогична структуре GPIOx_CRL и предназначена для управления режимами работы старших выводов порта (биты 8…15).
Биты MODEy указанных регистров определяют направление вывода и ограничение скорости переключения в режиме выхода:
MODEy[1:0] = 00: Режим входа (состояние после сброса);
MODEy[1:0] = 01: Режим выхода, максимальная скорость – 10МГц;
MODEy[1:0] = 10: Режим выхода, максимальная скорость – 2МГц;
MODEy[1:0] = 11: Режим выхода, максимальная скорость – 50МГц.
Биты CNF задают конфигурацию выходных каскадов соответствующих выводов:
в режиме входа:
CNFy[1:0] = 00: Аналоговый вход;
CNFy[1:0] = 01: Вход в третьем состоянии (состояние после сброса);
CNFy[1:0] = 10: Вход с притягивающим резистором pull-up (если PxODR=1) или pull-down (если PxODR=0);
CNFy[1:0] = 11: Зарезервировано.
в режиме выхода:
CNFy[1:0] = 00: Двухтактный выход общего назначения;
CNFy[1:0] = 01: Выход с открытым стоком общего назначения;
CNFy[1:0] = 10: Двухтактный выход с альтернативной функцией;
CNFy[1:0] = 11: Выход с открытым стоком с альтернативной функцией.
С целью повышения помехоустойчивости все входные буферы содержат в своём составе триггеры Шмидта. Часть выводов STM32, снабженных защитными диодами, соединёнными с общей шиной и шиной питания, помечены в datasheet как FT (5V tolerant) — совместимые с напряжением 5 вольт.
* 0 - Аналоговый ввод.
* 1 - Вывод Push Pull на 10 МГц.
* 2 - Вывод Push Pull на 2 МГц.
* 3 - Вывод Push Pull на 50 МГц.
* 4 - Цифровой вход.
* 5 - Вывод Open Drain на 10 МГц.
* 6 - Вывод Open Drain на 2 МГц.
* 7 - Вывод Open Drain на 50 МГц.
* 8 - Цифровой вход с подтяжкой в зависимости от значения в ODR.
* 9 - Альтернативный вывод Push Pull на 10 МГц от периферии.
* A - Альтернативный вывод Push Pull на 2 МГц от периферии.
* B - Альтернативный вывод Push Pull на 50 МГц от периферии.
* C - Зарезервировано.
* D - Альтернативный вывод Open Drain на 10 МГц от периферии.
* E - Альтернативный вывод Open Drain на 2 МГц от периферии.
* F - Альтернативный вывод Open Drain на 50 МГц от периферии.
typedef enum Configuration
{
PortAnalogIn = 0,
PortIn = 0x04,
PortPullUpOrDownIn = 0x08,
PortOut = 0x03, // default Out is Out50Mhz
PortOut10Mhz = 0x01,
PortOut2Mhz = 0x02,
PortOut50Mhz = 0x03,
PortOpenDrainOut = 0x07,
PortOpenDrainOut10Mhz = 0x05,
PortOpenDrainOut2Mhz = 0x06,
PortOpenDrainOut50Mhz = 0x07,
PortAltOut = 0x0B,
PortAltOut10Mhz = 0x09,
PortAltOut2Mhz = 0x0A,
PortAltOut50Mhz = 0x0B,
PortAltOpenDrain = 0x0f,
PortAltOpenDrain10Mhz = 0x0C,
PortAltOpenDrain2Mhz = 0x0E,
PortAltOpenDrain50Mhz = 0x0f
} port_configuration_t;
Запись и чтение GPIO
Для записи и чтения портов предназначены входной GPIOx_IDR и выходной GPIOx_ODR регистры данных.
Запись в выходной регистр ODR порта настроенного на вывод осуществляет установку выходных уровней всех разрядов порта в соответствии с записываемым значением. Если вывод настроен как вход с подтягивающими резисторами, состояние соответствующего бита регистра ODR активирует подтяжку вывода к шине питания (pull-up, ODR=1) или общей шине микроконтроллера (pull-down, ODR=0).
Чтение регистра IDR возвращает значение состояния выводов микроконтроллера настроенных как входы:
// Если кнопка нажата (PA0=1), установить биты порта C, иначе сбросить.
if (GPIOA->IDR & GPIO_IDR_IDR0) GPIOC->ODR=0xFFFF; else GPIOC->ODR=0x0000;
Сброс и установка битов порта
Для атомарного сброса и установки битов GPIO в микроконтроллерах STM32 предназначен регистр GPIOx_BSRR. Традиционный для архитектуры ARM способ управления битами регистров не требующий применения операции типа «чтение-модификация-запись” позволяет устанавливать и сбрасывать биты порта простой записью единицы в биты установки BS (BitSet) и сброса BR (BitReset) регистра BSRR. При этом запись в регистр нулевых битов не оказывает влияния на состояние соответствующих выводов.
GPIOx_BSRR – регистр сброса и установки битов порта:
GPIOC->BSRR=GPIO_BSRR_BS8|GPIO_BSRR_BR9; // Зажечь LED4 (PC8), погасить LED3.
GPIOC->BSRR=GPIO_BSRR_BS9|GPIO_BSRR_BR8; // Зажечь LED3 (PC9), погасить LED4.
Альтернативные функции GPIO и их переназначение (remapping)
Практически все внешние цепи специального назначения STM32 (включая выводы для подключения кварцевых резонаторов, JTAG/SWD и так далее) могут быть разрешены на соответствующих выводах микроконтроллера, либо отключены от них для возможности их использования в качестве выводов общего назначения. Выбор альтернативной функции вывода осуществляется при помощи регистров с префиксом «AFIO_”.
Помимо этого регистры AFIO_ позволяют выбирать несколько вариантов расположения специальных функций на выводах микроконтроллера. Это в частности относится к выводам коммуникационных интерфейсов, таймеров (регистры AFIO_MAPR), выводам внешних прерываний (регистры AFIO_EXTICR) и т. д.
Комментариев нет:
Отправить комментарий