STM32F4_1_GPIO输出

0、反省

不想只是略懂的状态,F4的开发板我有一块,上面的资源我用过简单的而已,而且用过也只是停留在表面,时间稍稍一走,记忆面目全非。反正视频也有,例程也有,到处都是资料,为什么不好好学一下呢?

1、代码

很简单,就是控制LED的亮灭。

不过对比了一下不同配置的效果,分别是“推挽输出”、“开漏上拉”,“开漏下拉”。

//初始化LED
void LED_Init()
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);	//使能GPIO时钟
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;		//F9、10,推挽输出
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
	
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;				//推挽
	
//	GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;				//开漏
//	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;				//上拉

//	GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;				//开漏
//	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_DOWN;			//下拉
	
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;			//50MHz
	GPIO_Init(GPIOF,&GPIO_InitStruct);

	GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);				//默认不点亮

}
int main(void)
{
	delay_init(168);				//时钟168MHz
	LED_Init();						//LED初始化

	while(1){
		
		GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);		//不亮
		delay_ms(500);
		
		GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);	//亮,低电平点亮
		delay_ms(500);
	}
}

1.1、推挽输出

正常。

1.2、开漏上拉

正常。

1.3 、开漏下拉

现象:LED可以正常亮,但是灭的时候,会不能完全灭掉。

对于开漏输出,输出0是没问题的,输出1的时候,会受上下拉电阻影响。

所以当开漏上拉的时候,输出0,灯亮;输出1,由于是上拉,为高电平灯灭也正常。
当开漏下拉的时候,输出0,灯亮;输出1,由于是下拉了,不是真正的高电平,就不正常了。

以下表格为万用表实测数据,可以看出推挽和开漏上拉是差不多的,开漏下拉IO口是1.62伏,3.3V - 1.62V = 1.68V,大于1.577V(LED压降) ,所以是可以导通的,LED会微微亮。

IO口配置输出高电平电压
推挽3.28V
开漏上拉3.27V
开漏下拉1.62V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值