F407_04_GPIO

在这里插入图片描述


1> 概述

GPIO(General-Purpose Input output)通用输入输出_控制器,属于器的一种,类似于热水器,灭火器,充电器…
STM32F407共有【9】个GPIO控制器,GPIOA~GPIOI。

2> 硬件电路

2.1> GPIO内部框图

在这里插入图片描述

1> GPIO内部方框图中只列出部分寄存器;
2> 省略时钟电路;

详细电路参考:《芯片接口库 I/O Library和ESD 电路的研发设计应用》


2.2> GPIO寄存器列表

1


2.3> GPIO功能描述

111


2.4> 电路实例

121

2.5> 硬件抽象

对于程序设计人员,使用GPIO控制器时,可抽象为一个黑盒子;
在这里插入图片描述


3> 程序设计

3.1> 功能需求

控制1个LED灯,ON/OFF, 频率无要求,人类看得见实验现象即可;


3.2> 流程图

1

流程图:表示程序的结构;
时序电路都需要时钟,时钟使能不可漏写;

3.3> 寄存器地址

11

寄存器地址的映射是连续的,使操作简单;

3.4> 程序 Ver_1

// 核心代码
int main ()
{
	unsigned int *RCC_AHB1ENER 	= (unsigned int *)(0x40023800 + 0x30);
	unsigned int *GPIOF_MODER 	= (unsigned int *)(0x40021400 + 0x00);
	unsigned int *GPIOF_OTYPER 	= (unsigned int *)(0x40021400 + 0x04);
	unsigned int *GPIOF_ODR 	= (unsigned int *)(0x40021400 + 0x14);

    
	/* 1> GPIOF clk : Enable*/
    *RCC_AHB1ENER |= (1<<5);                
    
	/* 2> Configure GPIOF9: OUTPUT */
    *GPIOF_MODER |= (1<<18);

	/* 3> Confgiure GPIOF9 output type: Push-pull */
    *GPIOF_OTYPER &=  (~(1<<9));
    
    while (1) {
        *GPIOF_ODR =  (*GPIOF_ODR) & (~(1<<9));
        delay(1000000);
		
        *GPIOF_ODR = (*GPIOF_ODR) | (1<<9);
        delay(1000000);
    }    
}

3.5> 程序 Ver_2

用结构体来描述GPIO寄存器地址,
使用,修改,阅读都方便;

// 核心代码
typedef struct GPIO {
    unsigned int MODER;
    unsigned int OTYPER;
    unsigned int OSPENDER;
    unsigned int PUPDR;
    unsigned int IDR;
    unsigned int ODR;
    unsigned int BSRR;
    unsigned int LCKR;
    unsigned int AFRL;
	unsigned int AFRH;
} GPIO_TypeDef;

//#define GPIOF  ((GPIO_TypeDef *) 0x40021400)
 
void delay (int tim);

int main ()
{
    unsigned int *RCC_AHB1ENER 	= (unsigned int *)(0x40023800 + 0x30);
	
	GPIO_TypeDef *GPIOF = ((GPIO_TypeDef *)0x40021400);
	
    /* 1> GPIOF clk : Enable*/
    *RCC_AHB1ENER |= (1<<5);  
    
    /* 2> Configure GPIOF9: OUTPUT */
    GPIOF->MODER |= (1<<18);

    /* 3> Confgiure GPIOF9 output type: Push-pull */
    GPIOF->OTYPER &=  (~(1<<9));
	   
    while (1) {
        GPIOF->ODR &= (~(1<<9));
        delay(100000);

		GPIOF->ODR |= (1<<9);
        delay(1000000);
    }    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值