STM32CubeMX---流水灯

源码下载链接:https://taileliekaishi.lanzoui.com/iYuCjgc6guf

注意:点击图片可放大查看

一、GPIO口的工作模式:

推挽输出与开漏输出都是通过寄存器来控制

推挽输出:上管和下管都导通,既可以输出高电平也可以输出低电平(能输出20mA电流也能输出20mA电流),如下图所示


应用:控制LED灯的亮灭,如下图所示

开漏输出:上管静止不导通,不能输出高电平,想输出高电平需要外接一个上拉电阻,如下图所示

应用:WIFI,内部有了上拉电阻,控制WIFI的使能和复位引脚我们只需要有一个信号(高低电平)来控制就行,如下图所示

总结:开漏输出和推挽输出的区别

开漏输出:作为信号输出,例如控制WIFI的使能和复位引脚,我们不需要驱动它,只需要给一个高低电平的信号即可

推挽输出:作为驱动输出,驱动外设,例如:驱动灯和数码管等,需要注意的是最大只能输出20mA电流,当需要驱动电流需求大的外设的时候(例如:蜂鸣器、MOS管等),需要接一个三极管来提高驱动能力。

复用功能:通过片上外设来控制,例如:CAN,串口、SPI 等,通过这些口来控制推挽和开漏

输入:作为输入的时候下面的输出部分是断开的

浮空输入、上拉输入、下拉输入:可作为GPIO口的一个中断或者是按键、具体选择哪种方式需要看外围电路需不需要启用内部的上下拉,不需要启用内部的上下拉就选用浮空输入,如果需要内部上拉就选上拉,需要内部下拉选下拉

模拟输入:AD采集。

二、流水灯编程

// 主函数
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
	MyInit.Peripheral_Set();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
			System.Run();
  /* USER CODE END 3 */
  }
}

// 流水灯实现函数
static void Run()
{
	HAL_Delay(400);
	// 亮
	HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
	HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
	
	
	HAL_Delay(400);
	// 让LED1亮,LED2灭
	HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
	
	// 让LED2亮,LED1灭
	HAL_Delay(400);
	HAL_GPIO_WritePin(LED2_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
	HAL_GPIO_WritePin(LED1_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);

}

猜你喜欢

转载自blog.csdn.net/weixin_39903708/article/details/108392320