STM32F429ZGTX之GPIO点灯实验(轮询方式)

实验环境:

CUBEMX、keil

实验目的:

使用GPIO对单片机驱动二极管通电,以轮询的方式对按键电路进行检测,实现点灯的目的

实验步骤

使用cubemx对代码进行初始化,以便在HAL库的基础上只需完成对功能代码的编写

1. 创建一个工程

2. 搜索并选择对应芯片型号

3. 高速时钟选择晶振

4. 可以在红框中直接输入频率值后按回车,系统会自动帮你配置其余参数

5. 调试选择红框内的串口线(serial wire)

6. 选择单片机led灯连通的GPIO,通过查找STM32F429ZGTX的硬件手册,选择GPIOE3的LED1来进行点灯,同时,由于这个板子只有三个按键,一个用于boot,一个用于reset,故只能选择GPIOA0作为实验按键(这也是为什么在步骤5中会有红色框的原因,因为PA0是用于wake-up,但对此次实验无影响)

7. PA0用于在电路中直接接地,所以我们最好对PA0设置为下拉输入,PE3设置为推挽输出,其余的按图所示进行配置就行(label可自行配置,相当于对使用的GPIO取一个别名,在编写代码时可以增加可读性)

8. 填写工程名称,选择MDK-ARM,然后在code generator中选择如图,之后点击generate code,最后点击open project,则在keil中打开工程

9. 为了模块化编程,在工程中创建两个文件,即key.c和key.h用于按键返回函数的编写

keil中创建空白文件如图所示

两个文件的要放在对应工程目录下

          

如下图中

         

10. 编写代码 

main.c中编写代码如下:

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint8_t keyvalue = KEY_NO;        // 用于判断按键是否按下
  /* 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 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		keyvalue = key_scan();                 // 此函数在key.c中
		if(keyvalue != KEY_NO)
		{
			HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_3);
		}
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

key.c中代码如下(注意要在main.c中include这个文件):

#include "key.h"

uint8_t key_scan(void)
{
	static uint8_t flag = UP;
	if((flag == UP)&&(PA0_STATUS == GPIO_PIN_SET))
	{
		flag = DOWN;
		return KEY_UP_VALUE;
	}
	
	if((flag == DOWN)&&(PA0_STATUS == GPIO_PIN_RESET))
	{
		HAL_Delay(10);
		if(PA0_STATUS == GPIO_PIN_RESET)
			flag = UP;
	}
	
	return KEY_NO;
}

key.h中代码如下:

#ifndef _KEY_H
#define _KEY_H

#include "main.h"

#define PA0_STATUS  HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)
#define KEY_UP_VALUE 0x01
#define KEY_NO       0xFF
#define UP    0
#define DOWN  1

uint8_t key_scan(void);
#endif

11. 代码下载到单片机前,一定一定一定要记得编译一遍,然后对调试串口进行设置就可以下载到单片机中进行硬件测试了

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值