【GD32F4xx源码】3. GPIO按键输入

1. 电路图

PA0:输入GPIO口

按键按下:PA0捕获为1,松开捕获为0,配置为下拉电阻

2. 用户手册介绍

3. 项目流程

1. 使能AHB1时钟

2. 配置控制寄存器为输入模式

3. 端口上拉/下拉寄存器

4. 配置端口输入状态寄存器比较高低电平判断输入是高电平还是低电平

4. 源码

新增文件key.c 和key.h

// key.c
#include  "key.h"

void key_init(void){
	unsigned int * GPIOA_CTL = (unsigned int *)(BSP_GPIOA + GPIOA_CTL);
	* GPIOA_CTL &= ~(0x03);
	
	unsigned int * GPIOA_PUD = (unsigned int *)(BSP_GPIOA + GPIOA_PUD);
	* GPIOA_PUD &= ~(0x03);
	* GPIOA_PUD |= (0x02);
}
//key.h
#ifndef _KEY_H_
#define _KEY_H_

#define BSP_GPIOA						(unsigned int)(0x40020000)
#define KEY_CTL							(unsigned int)(0x00)
#define KEY_PUD							(unsigned int)(0x0C)
#define KEY_ISTAT						(unsigned int)(0x10)
#define GPIOA_ISTAT 				*(unsigned int*)(BSP_GPIOA+KEY_ISTAT)

#endif

在main函数循环体中,判断GPIOA0的输入状态,并反转LED1的输出电平 

//main.c
#include "gd32f4xx.h"                   // Device header
//#include "gd32f4xx_it.h"
#include "systick.h"
#include <stdio.h>

#include "rcu_config.h"
#include "led.h"
#include "key.h"

#define bit(x)  (unsigned int)(1<<x)

int main(){
	
	systick_config();
	AHB1_CONF();
	LED1_CONF();
	unsigned int * GPIOE3_TG = (unsigned int *)(GPIOE_BASE+GPIOx_TG);
	//unsigned int * GPIOE3_BOP = (unsigned int *)(GPIOE_BASE+GPIOx_BOP);
	while(1)
	{
		//* GPIOE3_TG |= (0x01<<3);
		//*GPIOE3_BOP |= (0x01<<3);

		if(GPIOA_ISTAT&(0x0001))
		{
			delay_1ms(10);
			if(GPIOA_ISTAT&(0x0001))
				* GPIOE3_TG |= (0x01<<3);
		}
		
		
	}
}

时钟开启放置在rcu_config.c文件,如同前文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值