实验一、闪灯实验

单片机驱动LED有两种接法,一种为开漏接法,另一种为推挽接法。如下图所示。

推挽接法需要将IO引脚设置为输出推挽模式,LED阳极接IO引脚,阴极接地。向IO写0输出低电平,LED熄灭。向IO写1输出高电平,LED点亮。

开漏接法需要将IO引脚设置为输出开漏模式,LED阳极接高电压VDD,阴极IO引脚。向IO写0输出低电平,LED点亮。向IO写1输出高阻抗,LED熄灭。

本次闪灯实验需要两颗LED。

LED1:在咱们的单片机上有一颗板载LED,采用的为开漏接法,连接的为我们单片机的PC13引脚。

LED2:我们外接一颗LED,我们将它连接到单片机的PA9引脚上,采用推挽接法。即阳极接PA9,阴极接VSS。

具体连接图如下:

1、CubeMx配置

参数说明:
GPIO mode:  选择IO引脚的模式:output push-pull——输出推挽
                                                       output open-drain——输出开漏
GPIO output level:设置IO引脚的初始值:0/1
Maximum output speed:设置IO引脚的最大输出速度
GPIO Pull-up/Pull-down:用来选择上拉或者下拉电阻
User Label:自定义标签

注意:命名时不能有中文路径

至此,关于CubeMX的配置结束。接下来就是对于Keil代码的修改。

2、Keil代码修改

我们进行后,点击main.c文件。本次我们的全部代码全部在main.c文件中。

相关代码说明:

  HAL_Init();----HAL库的初试化。

  SystemClock_Config();------初始化系统时钟

  MX_GPIO_Init();——GPIO引脚的初始化

2.1 编程思路

由于PC13是开漏接法,PA9是推挽接法,所以对于点亮两颗LED,对于PC13需要写0才可以点亮,对于PA9需要写1才可以点亮。

想让LED闪烁,假如每一秒钟闪烁一次,我们就需要让其延迟1/2秒,延迟结束后,我们再把LED熄灭,也就是向PC13写1,向PA9写0。结束后,我们再延迟0.5秒。

以此反复以上步骤。

2.2 编程接口

void HAL_GPIO_WritePin(GPIOx,GPIO_Pin, )
作用:向IO写0或者1
参数说明:GPIOx : 填写引脚的组编号 ,x取A,B,C,D.例如GPIOC
         GPIO_Pin : 设置引脚编号,例如,GPIO_Pin_13.
         PinState:  用来指定向IO写0还是写1.  GPIO_PIN_RESET——写0
                                            GPIO_PIN_SET——写1       

void HAL_Delay(uint32_t Delay)
作用:延迟一段时间
参数说明: Delay:用来设置延迟的时间长度,单位为ms

2.3 代码

我们需要把代码写在 /* USER CODE BEGIN WHILE */和    /* USER CODE END WHILE */之间,否则下次自动生成程序时会被删除。

代码如下:

while (1)
  {
        //点亮LED
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_SET);
		
		HAL_Delay(1000); //延迟1秒

		//熄灭LED
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_9,GPIO_PIN_RESET);
		
		HAL_Delay(1000);
		
    /* USER CODE END WHILE */
     
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

其余的代码不需要更改。

再编译代码,点击如图图标

出现以下0错误0警告,表示代码运行无误。

最后将代码下载到单片机中,点击如下图标。

至此,即可实现两颗LED灯的呼吸灯效果。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐