STM32之GPIO

上一篇已经设置好时钟了,哈哈,时钟设置好不能让CPU闲着呢,让它点灯吧(编程中的hello world)

 

好了,大家可能接触过51单片机,但是再接触STM32后就感觉GPIO不像以前那样了,不要迷惑,为什么要一样呢,它又不是51。

 

那GPIO得内部结构图我觉得就没有必要看了,咱就单从功能层面来了解吧(原因之一本人对电路不是很来电)

 

GPIO集中模式如下:

 

 

现在每种模式都说一下也记不住(其实我也不全知道),以后学习用到再补充吧

常用的就是Input floating和Output push-pull

现在看下关于GPIO的寄存器:

 

 

如果不用库这些你必须得熟练使用,咱这使用库只要先简单了解下

这些寄存器在stm32f10x.h中有定义,我们看下

至于他们的功能去查数据手册吧

用库我们都知道,好多模块的配置都是使用结构体来完成的,那我们来看下GPIO的模块的结构体(不包含AFIO)

 

 我们只是列举这一个,另外的类似,GPIO_Speed和GPIO_Mode自己在stm32f10x_gpio.h中找吧

相应的模块在stm32f10x_xxx.h中查找

 

其实说的再多也没用,还是动手吧(RCC_Configuration()函数我们上一篇已经写了在这就不写了)

 

void GPIO_Configuration(void)
{

         
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //后加的,开启GPIOB的时钟

         GPIO_InitTypeDef GPIO_InitStructure;                               //定义一个存放配置参数的结构体

 

         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                       //GPIOB_Pin_5
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //输出速率,根据实际需要选择

 

         GPIO_Init(GPIOB,&GPIO_InitStructure);


         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;                      //GPIOB_Pin_15
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_IPU;       //上拉输入

         GPIO_Init(GPIOB,&GPIO_InitStructure);                               //用结构体配置GPIO

}

看完不觉得少点东西吗?确实是少了,配置时钟时我们曾说过在使用一个模块式要先开启对应的时钟

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

还有一点,STM32的GPIO可以通过两个寄存器进行位操作,在库中也有相应的函数,我们将库中与GPIO相关的函数列在下边

 

 

查看以上的函数你就知道怎么样使用GPIO了

 

                                                                     如有错位敬请指正       ------by swei.fu

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F107是STMicroelectronics(意法半导体)推出的一款32位微控制器系列。它具有多个通用输入输出(GPIO)引脚,用于连接外部设备并进行数字输入输出。 STM32F107的GPIO引脚可以通过寄存器配置为输入或输出。以下是使用C语言编程的示例代码,用于配置和控制STM32F107的GPIO引脚: 1. 首先,包含STM32F107的头文件和相关库文件: ```c #include "stm32f10x.h" ``` 2. 初始化GPIO引脚。例如,将GPIO引脚1配置为输出,GPIO引脚2配置为输入: ```c GPIO_InitTypeDef GPIO_InitStructure; // 配置GPIO引脚1为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置GPIO引脚2为输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); ``` 3. 控制GPIO引脚。例如,将GPIO引脚1设置为高电平,读取GPIO引脚2的状态: ```c // 设置GPIO引脚1为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_1); // 读取GPIO引脚2的状态 if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == Bit_SET) { // GPIO引脚2为高电平 } else { // GPIO引脚2为低电平 } ``` 以上代码仅为示例,实际应用中需要根据具体需求进行配置和控制。还请注意,在使用GPIO之前,需要先使能对应的GPIO时钟。 希望这可以回答你关于STM32F107 GPIO的问题!如果有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值