STM32初识:
1.存器存放的是指令、数据或地址。
2.GPIO端口的输出初始化顺序:
3.推挽输出和开漏输出。
所谓的驱动能力,就是指输出电流的能力。
推挽输出的最大特点是可以真正能真正的输出高电平和低电平,在两种电平下都具有驱动能力。相比于开漏输出,输出高电平时的驱动能力强很多。
但推挽输出的一个缺点是,如果当两个推挽输出结构相连在一起,一个输出高电平,整个通路上电阻很小,会发生短路,进而可能造成端口的损害。这也是为什么推挽输出不能实现" 线与"的原因。
具体就是上面的MOS导通,下面的MOS闭合时;同时另一个输出低电平,即上面的MOS闭合,下面的MOS导通时。电流会从第一个引脚的VCC通过上端MOS再经过第二个引脚的下端MOS直接流向GND。
开漏输出最主要的特性就是高电平没有驱动能力,需要借助外部上拉电阻才能真正输出高电平。
寄存器的结构体封装:
上图为宏定义寄存器基地址。
typedef struct
{
__IO uint32_t MODER; /*GPIO模式寄存器 地址偏移: 0x00 */
__IO uint32_t OTYPER; /*GPIO输出类型寄存器 地址偏移: 0x04 */
__IO uint32_t OSPEEDR; /*GPIO输出速度寄存器 地址偏移: 0x08 */
__IO uint32_t PUPDR; /*GPIO上拉/下拉寄存器 地址偏移: 0x0C */
__IO uint32_t IDR; /*GPIO输入数据寄存器 地址偏移: 0x10 */
__IO uint32_t ODR; /*GPIO输出数据寄存器 地址偏移: 0x14 */
__IO uint16_t BSRRL; /*GPIO置位/复位寄存器 低16位部分 地址偏移: 0x18 */
__IO uint16_t BSRRH; /*GPIO置位/复位寄存器 高16位部分 地址偏移: 0x1A */
__IO uint32_t LCKR; /*GPIO配置锁定寄存器 地址偏移: 0x1C */
__IO uint32_t AFR[2]; /*GPIO复用功能配置寄存器 地址偏移: 0x20-0x24 */
} GPIO_TypeDef;
定义寄存器结构体
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)
#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)
#define RCC ((RCC_TypeDef *) RCC_BASE)
定义结构体指针
//RCC->AHB1ENR |= (1<<7);(时钟开启)
//GPIOH->MODER &= ~( 0x03<< (210));
// GPIOH->MODER |= (1<<210);
// GPIOH->OTYPER &= ~(1<<110);
// GPIOH->OTYPER |= (0<<110);
// GPIOH->OSPEEDR &= ~(0x03<<210);
// GPIOH->OSPEEDR |= (0<<210);
// GPIOH->PUPDR &= ~(0x03<<210);
// GPIOH->PUPDR |= (1<<210);
// GPIOH->BSRRH |= (1<<10);
// GPIOH->BSRRL |= (1<<10);
结构体指针的使用。