欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【NUCLEO_F767ZI开发板系列】三、LED灯和按键

程序员文章站 2022-06-09 15:09:25
...

一、LED灯

 首先,Nucleo开发板上一共有8颗LED灯

  LED1~3是用户LED :LED1:绿色;LED2蓝色;:LED3:红色

  LED4 :三色(绿色,橙色,红色)提供有关ST-LINK的与PC的信息沟通状态。默认颜色是红色的。LD4变成绿色表  PC与ST-LINK / V2-1之间正在进行通讯,具体如下:
   •慢速闪烁红色/熄灭:在USB初始化之前已经接通电源
   •快速闪烁红色/熄灭:PC和ST-LINK / V2-1(枚举)之间的第一次正确通信之后的状态,
   •红色LED亮起:PC和ST-LINK / V2-1之间的初始化完成时
   •绿色LED亮起:通信初始化成功后
   •闪烁红色/绿色:通信期间
   •绿灯亮起:通信完成并成功
   •橙灯亮:通信失败

  LED5 :USB电源警告,LD5指示USB供电(U5V)超过500mA,用户必须使用外部电源为电路板供电。
  LED6 :PWR,绿色LED指示STM32芯片已上电,CN8引脚9和CN11引脚18上有+5 V电源。
  LED7和LED8 :USB FS或设备的指示。


这里我们编程使用的是LED1~LED3。根据用户手册的说明,在Cube里配置引脚:LED1默认在PB0口。


【NUCLEO_F767ZI开发板系列】三、LED灯和按键


打开原理图发现,这三个用户LED连接的方式不一样,LED2和LED3都是直接接IO口,另一端接地,IO推挽输出高的时候灯被点亮。


【NUCLEO_F767ZI开发板系列】三、LED灯和按键


但LED1就不一样了,它是通过一个运算放大器来驱动的,型号:TSV631AILT,是ST设计的的轨到轨CMOS运算放大器,可以运行在从1.5到5.5 V的电压范围,而且功耗很低,5V电压时的功耗只有60uA。此电路是一个典型的电压跟随器,同相输入端为高电平时,输出就是高电平,所以当PB0为高时,LED1点亮。以前见到的LED驱动电路大多是直接接IO口,另一端接VDD或VCC,用三极管驱动的都很少,这次竟然见到了用运放驱动的电路,不知道ST这么设计的原因是什么。


【NUCLEO_F767ZI开发板系列】三、LED灯和按键

配置PB0、PB7、PB14的IO引脚为输出模式

【NUCLEO_F767ZI开发板系列】三、LED灯和按键【NUCLEO_F767ZI开发板系列】三、LED灯和按键【NUCLEO_F767ZI开发板系列】三、LED灯和按键

【NUCLEO_F767ZI开发板系列】三、LED灯和按键

  • GPIO outputLevel (管脚输出状态):低电平。
  • GPIO mode (管脚模式 ):推挽输出。
  • GPIO Pull-up/pull-down(上拉/下拉):不上拉也不下拉。
  • Maximum output speed (最大输出速度):高速。
  • User Label (用户标签):LED1~3。

设置好后,回到引脚配置界面发现,LED的三个引脚已经自动改成了自己定的标签:


【NUCLEO_F767ZI开发板系列】三、LED灯和按键


时钟配置在上一篇的工程里已经配置好216MHz的主频了,使用ST_Link的MCO的8MHz输入。


【NUCLEO_F767ZI开发板系列】三、LED灯和按键


在配置选项里选择CORTEX_M7,


【NUCLEO_F767ZI开发板系列】三、LED灯和按键


 1) Flash Interface:选择 Flash 接口,为 AXI 或者 TCM。
 2) ARI ACCLERATOR:使能缓存加速。
 3) Instruction Prefetch:使能指令预取。
 4) CPU ICache:使能 I-Cache。
 5) CPU DCache: 使能 D-Cache。

 最后生成代码,

在main.h文件里,有如下的宏定义:

#define LED1_Pin GPIO_PIN_0
#define LED1_GPIO_Port GPIOB
#define LED3_Pin GPIO_PIN_14
#define LED3_GPIO_Port GPIOB
#define LED2_Pin GPIO_PIN_7
#define LED2_GPIO_Port GPIOB


在主函数while(1)添加以下代码:


		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
		HAL_Delay(500);
配置Debug选项:

【NUCLEO_F767ZI开发板系列】三、LED灯和按键

 下载到开发板,现象如下图所示,三个LED灯循环点亮和熄灭。

【NUCLEO_F767ZI开发板系列】三、LED灯和按键

二、按键

 接着在工程的基础上添加按键(采用查询方式)

 用户手册:两个按键,一个用户按键(PC13),一个复位按键。

【NUCLEO_F767ZI开发板系列】三、LED灯和按键

 默认是下拉的,按键按下为高电平。

【NUCLEO_F767ZI开发板系列】三、LED灯和按键

 在Cube中配置如图:

  【NUCLEO_F767ZI开发板系列】三、LED灯和按键选择GPIO_Input

 配置Pin的参数如下图:

  【NUCLEO_F767ZI开发板系列】三、LED灯和按键

  生成代码,在main.h函数中,又有了关于KEY的宏定义。GPIO的初始化函数中,也自动生成了按键的初始化程序。

#define KEY_Pin GPIO_PIN_13
#define KEY_GPIO_Port GPIOC
  在主函数的while(1)中添加如下代码:
		if( HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == GPIO_PIN_SET )
		{
			Led_Set++;
			HAL_Delay(300);
			if(Led_Set>=4) Led_Set=1;
			
			if(Led_Set==1)
			{
				HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
			}
			else if (Led_Set==2)
			{
				HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
			}
			else if (Led_Set==3)
			{
				HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
			}
		}

  下载到开发板里,效果如图所示:


【NUCLEO_F767ZI开发板系列】三、LED灯和按键