推挽模式:高-》低、低-》高电平都能驱动
开漏模式:只能低-》高电平能驱动,高电平相当于高阻态
GPIO_WriteBit 操作单个
GPIO_ResetBits 操作同组
USE_STDPERIPH_DRIVER
第一步使用RCC开启 GPIO的时钟
第二步使用GPIO_init函数初始化GPIO
第三步使用输入或者输出的函数控制GPIO口
运行 | 备注 | 灯泡结果 |
---|---|---|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;开启推挽模式 | 低-》高 | 正常 |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;开启推挽模式 | 小灯泡改为高电平转低电平 | 不亮 |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;开启开漏模式 | 小灯泡改为高电平转低电平 | 不亮 |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;开启开漏模式 | 低-》高 | 正常 |
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽模式 0x10,最大输出速度为2MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //使用GPIOA外设0号引脚 ((uint16_t)0x0001)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
/**
*
*给GPIO配置结构体,初始化GPIO对象 给
*&GPIO_InitStructure 取地址
*
*/
GPIO_Init(GPIOA,&GPIO_InitStructure); //给GPIO配置结构体,初始化GPIO对象 给
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Delay_ms(500);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0, (BitAction)0);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0, (BitAction)1);
Delay_ms(500);
}
}
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽模式 0x10,最大输出速度为2MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //使用GPIOA所有引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
/**
*
*给GPIO配置结构体,初始化GPIO对象 给
*&GPIO_InitStructure 取地址
*
*/
GPIO_Init(GPIOA,&GPIO_InitStructure); //给GPIO配置结构体,初始化GPIO对象 给
while(1)
{
GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001
Delay_ms(500);
GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010
Delay_ms(500);
GPIO_Write(GPIOA,~0x0004);//0000 0000 0000 0100
Delay_ms(500);
GPIO_Write(GPIOA,~0x0008);//0000 0000 0000 1000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0010);//0000 0000 0001 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0020);//0000 0000 0010 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040);//0000 0000 0100 0000
Delay_ms(500);
GPIO_Write(GPIOA,~0x0080);//0000 0000 1000 0000
Delay_ms(500);
}
}
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//RCC_APB2Periph_GPIOB
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽模式 0x10,最大输出速度为2MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //使用GPIOA12引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
/**
*
*给GPIOB配置结构体,初始化GPIO对象 给
*&GPIO_InitStructure 取地址
*
*/
GPIO_Init(GPIOB,&GPIO_InitStructure); //给GPIOB配置结构体,初始化GPIO对象 给
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);//
Delay_ms(100);
GPIO_SetBits(GPIOB,GPIO_Pin_12);//
Delay_ms(100);
}
}