OpenMPTL - STM32F4
C++ Microprocessor Template Library
Public Types | Static Public Attributes | List of all members
mptl::GPIO< port > Struct Template Reference

General-purpose and alternate-function I/Os (GPIOs and AFIOs)

#include <gpio.hpp>

Public Types

using MODER = reg< uint32_t, base_addr+0x00, rw, moder_reset >
 GPIO port mode register. More...
 
using OTYPER = reg< uint32_t, base_addr+0x04, rw >
 GPIO port output type register. More...
 
using OSPEEDR = reg< uint32_t, base_addr+0x08, rw, ospeedr_reset >
 GPIO port output speed register. More...
 
using PUPDR = reg< uint32_t, base_addr+0x0c, rw, pupdr_reset >
 GPIO port pull-up/pull-down register. More...
 
using IDR = reg< uint32_t, base_addr+0x10, ro >
 GPIO port input data register. More...
 
using ODR = reg< uint32_t, base_addr+0x14, rw >
 GPIO port output data register. More...
 
using BSRR = reg< uint32_t, base_addr+0x18, wo >
 GPIO port bit set/reset register. More...
 
using LCKR = reg< uint32_t, base_addr+0x1c, rw >
 GPIO port configuration lock register. More...
 
using AFRL = reg< uint32_t, base_addr+0x20, rw >
 GPIO alternate function low register. More...
 
using AFRH = reg< uint32_t, base_addr+0x24, rw >
 GPIO alternate function high register. More...
 
template<unsigned pin_no>
using MODERx = regbits< MODER, pin_no *2, 2 >
 
template<unsigned pin_no>
using OTYPERx = regbits< OTYPER, pin_no, 1 >
 
template<unsigned pin_no>
using OSPEEDRx = regbits< OSPEEDR, pin_no *2, 2 >
 
template<unsigned pin_no>
using PUPDRx = regbits< PUPDR, pin_no *2, 2 >
 
template<unsigned pin_no>
using IDRx = regbits< IDR, pin_no, 1 >
 
template<unsigned pin_no>
using ODRx = regbits< ODR, pin_no, 1 >
 
template<unsigned pin_no>
using AFRLx = regbits< AFRL, pin_no *4, 4 >
 
template<unsigned pin_no>
using AFRHx = regbits< AFRH,(pin_no % 8) *4, 4 >
 pin_no = [0..7] More...
 
template<unsigned pin_no>
using AFRx = typename std::conditional<(pin_no< 8), AFRLx< pin_no >, AFRHx< pin_no > >::type
 pin_no = [8..15] More...
 

Static Public Attributes

static constexpr unsigned gpio_no = port - 'A'
 
static constexpr reg_addr_t base_addr = 0x40020000 + (gpio_no * 0x0400)
 
static constexpr uint32_t moder_reset
 
static constexpr uint32_t ospeedr_reset
 
static constexpr uint32_t pupdr_reset
 

Member Typedef Documentation

◆ AFRH

template<char port>
using mptl::GPIO< port >::AFRH = reg< uint32_t, base_addr + 0x24, rw >

◆ AFRHx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::AFRHx = regbits< AFRH , (pin_no % 8) * 4, 4 >

◆ AFRL

template<char port>
using mptl::GPIO< port >::AFRL = reg< uint32_t, base_addr + 0x20, rw >

◆ AFRLx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::AFRLx = regbits< AFRL , pin_no * 4 , 4 >

◆ AFRx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::AFRx = typename std::conditional< (pin_no < 8), AFRLx<pin_no>, AFRHx<pin_no> >::type

GPIO alternate function: returns AFRLx or AFRHx type dependent on pin_no.

NOTE: this is not from the reference manual

◆ BSRR

template<char port>
using mptl::GPIO< port >::BSRR = reg< uint32_t, base_addr + 0x18, wo >

◆ IDR

template<char port>
using mptl::GPIO< port >::IDR = reg< uint32_t, base_addr + 0x10, ro >

◆ IDRx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::IDRx = regbits< IDR , pin_no , 1 >

◆ LCKR

template<char port>
using mptl::GPIO< port >::LCKR = reg< uint32_t, base_addr + 0x1c, rw >

◆ MODER

template<char port>
using mptl::GPIO< port >::MODER = reg< uint32_t, base_addr + 0x00, rw, moder_reset >

◆ MODERx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::MODERx = regbits< MODER , pin_no * 2 , 2 >

◆ ODR

template<char port>
using mptl::GPIO< port >::ODR = reg< uint32_t, base_addr + 0x14, rw >

◆ ODRx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::ODRx = regbits< ODR , pin_no , 1 >

◆ OSPEEDR

template<char port>
using mptl::GPIO< port >::OSPEEDR = reg< uint32_t, base_addr + 0x08, rw, ospeedr_reset >

◆ OSPEEDRx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::OSPEEDRx = regbits< OSPEEDR, pin_no * 2 , 2 >

◆ OTYPER

template<char port>
using mptl::GPIO< port >::OTYPER = reg< uint32_t, base_addr + 0x04, rw >

◆ OTYPERx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::OTYPERx = regbits< OTYPER , pin_no , 1 >

◆ PUPDR

template<char port>
using mptl::GPIO< port >::PUPDR = reg< uint32_t, base_addr + 0x0c, rw, pupdr_reset >

◆ PUPDRx

template<char port>
template<unsigned pin_no>
using mptl::GPIO< port >::PUPDRx = regbits< PUPDR , pin_no * 2 , 2 >

Member Data Documentation

◆ base_addr

template<char port>
constexpr reg_addr_t mptl::GPIO< port >::base_addr = 0x40020000 + (gpio_no * 0x0400)
static

◆ gpio_no

template<char port>
constexpr unsigned mptl::GPIO< port >::gpio_no = port - 'A'
static

◆ moder_reset

template<char port>
constexpr uint32_t mptl::GPIO< port >::moder_reset
static
Initial value:
= ( port == 'A' ? 0xA8000000 :
port == 'B' ? 0x00000280 :
0x00000000 )

◆ ospeedr_reset

template<char port>
constexpr uint32_t mptl::GPIO< port >::ospeedr_reset
static
Initial value:
= ( port == 'B' ? 0x000000C0 :
0x00000000 )

◆ pupdr_reset

template<char port>
constexpr uint32_t mptl::GPIO< port >::pupdr_reset
static
Initial value:
= ( port == 'A' ? 0x64000000 :
port == 'B' ? 0x00000100 :
0x00000000 )

The documentation for this struct was generated from the following file: