STM32入门三(开漏输出点亮外接的LED)

前面2章用的是推免输出,
推免输出:
输出端由两个晶体管构成:一个N沟道晶体管和一个P沟道晶体管。这两个晶体管一般不会同时导通,避免短路; 白话,就是输入高还是低,由你的GPIO 控制(GPIO 输出高就高,低就是低),电压由GPIO 提供高低电压 ,一般 VCC 70%↑的为高, 30%↓ 为低
开漏输出
I/O引脚仅有一个下拉晶体管。当输出低电平时,晶体管导通,引脚连接到地(GND)。当晶体管关闭时,并不直接提供高电平,而是处于高阻态,需要通过外部上拉电阻连接到高电平电源,以提供高电平;白话,GPIO可控制 I/O输出高阻态或低电平,高阻态时引脚对地电阻无穷,此时读引脚电平时可以读到真实的电平值。高阻态的重要作用就是I/O(输入/输出)口在输入时读入外部电平用
上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,下拉同理。上拉是对器件注入电流,下拉是输出电流,弱强只是上拉电阻的阻值不同
上拉电阻很大,提供的驱动电流很小,叫弱上拉;反之叫强上拉。
总之 开漏输出本身是不带高电平的,若想要输出为高,需要外接上拉电阻才能输出高电平。常用的I2C电路为典型的开漏输出电路。

1:环境
STM32F103C8T6
外部LED灯一个
电阻 10K 欧姆 (一般推荐 控制 10KΩ- 100KΩ ,通信1KΩ-10KΩ)
2:线路连接图
GPIO A2
下面2种都可以,方正都是串在一起
1>
在这里插入图片描述
在这里插入图片描述

2>
在这里插入图片描述

在这里插入图片描述

3:主要代码

void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);

  /*Configure GPIO pin : PA2 */
  GPIO_InitStruct.Pin = GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET); //高 //LED 亮
	  	  delay_ms_func(1000);
	  	  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET); //低电平   //led 灭
	  	  delay_ms_func(1000);
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

4:运行结果
在这里插入图片描述
在这里插入图片描述
1OKΩ的,不怎么亮(不知道还是白天的)
换个4.7KΩ的 ,来张照片
在这里插入图片描述

5:DEMO工程
有需要再上传
如果觉得有用,麻烦点个赞,加个收藏

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值