stm32 gpio的相关问题

gpio 设置流程:

  1. 设置gpio的时钟
  2. 设置gpio 的pin角
  3. 设置gpio pin的功能(速度 输入输出模式 reset)
  4. 设置gpio data
void LED_Init(void)
{    	 
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;               
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;             //100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                  
  GPIO_Init(GPIOG, &GPIO_InitStructure);                        
	
	GPIO_SetBits(GPIOG, GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);  //GPIOG13,G14,G15

}
stm32f4xx_rcc.c
//功能为打开或关闭对应的外设输出时钟端口
 
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{
  
  assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph)); //参数纠正
  assert_param(IS_FUNCTIONAL_STATE(NewState));      //参数验证
 
 
  /*参考结构体RCC_TypeDef,APB2NR为外设时钟使能寄存器,偏移地址0x18 */
  if (NewState != DISABLE)
  {
    RCC->APB2ENR |= RCC_APB2Periph; //打开对应的外设时钟输出口
  }
  else
  {
    RCC->APB2ENR &= ~RCC_APB2Periph;//关闭对应的外设时钟输出口
  }
}

#define RCC ((RCC_TypeDef *) RCC_BASE)
#define RCC_BASE (AHB1PERIPH_BASE + 0x3800)
#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000)
#define PERIPH_BASE ((uint32_t)0x40000000)
即: RCC bassaddress = 0x40023800
根据映射地址:
](https://img-blog.csdnimg.cn/20200909221348843.png#pic_center)

AHB1 enable
#define RCC_AHB1Periph_GPIOD ((uint32_t)0x00000008)
#define RCC_AHB1Periph_GPIOE ((uint32_t)0x00000010)
#define RCC_AHB1Periph_GPIOF ((uint32_t)0x00000020)
#define RCC_AHB1Periph_GPIOG ((uint32_t)0x00000040)
#define RCC_AHB1Periph_GPIOH ((uint32_t)0x00000080)
#define RCC_AHB1Periph_GPIOI ((uint32_t)0x00000100)
#define RCC_AHB1Periph_GPIOJ ((uint32_t)0x00000200)
在这里插入图片描述
由系统时钟可以看到gpio 是通过ahb给外设分配时钟:
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值