STM32 之GPIO

学习嵌入式开发的都知道STM32这个熟悉的不能再熟悉的单片机了,不管是在校的学习或者是工作项目上,它都很好的充当了这个角色。在此,我就分享一下我学习STM32时的技术经验,希望可以帮到大家学习STM32.

什么是库开发??

学过51单片机的都知道,要控制51芯片的工作方式(中断,定时等)在配置的时候,我们都要去查阅datasheet里面的寄存器表,看看使用了哪些配置位,要配置某功能的时候,要看看是该置1还是置0。这些工作都非常的繁琐,并且这个开发方式很机械。也就因为51单片机的资源有限,所以可以直接使用这种寄存器的开发方式(如果现在要我回到配置寄存器开发方式,我宁愿去种田!!!)。
相反,在STM32这种资源较多的芯片上,使用配置寄存器的开发方式显得有点笨拙(当然也可以用,只不过不推荐)所以,ST公司针对STM32就提供了一个STM32库来方便我们,里面提供的API(接口函数),我们可以直接去调用这些函数来配置工作方式,也就可以脱离对寄存器直接操作的开发方式了,同时也提高了开发的速度,降低维护的成本,大大提高了可读性(因为里面的函数名称都是见其名懂其意的!!)。

那么我们下面就说说STM32第一个外设 GPIO(以下都是直接分析API和代码流程,至于工程的建设,环境的搭建,这里就不说了)

ps:在keil里面,想查阅某个函数的实现方式,或者某个数据类型的定义和某个形参的选择,在编译一次代码后,直接把光标点到目标,按下F12即可

以下是一个GPIO的初始化方式

void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体

    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);//打开外设时钟 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;  //配置当前要使用的引脚

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //输出方式为通用推挽输出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //频率为50MHz

    GPIO_Init(GPIOC, &GPIO_InitStructure);        //将整个结构体初始化,并且给予在第几组的GPIO这里面使用的是GPIOC

    GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);   //将引脚都拉高,这样就是让led灭

}

1,定义一个GPIO_InitTypeDef类型的结构体(可以使用F12看看这个结构体里面具体有什么参数)
2,所有外设在配置之前都要做的一件事情就是打开外设的时钟RCC_APB2PeriphClockCmd()或者是RCC_APB1PeriphClockCmd(),这里要注意下,要使用这个函数的时候,你必须去查看你的外设是挂载哪个总线上(所有的GPIO都是挂载在APB2上的具体可以查看数据手册)
ps:这里还要说一个引脚复用的知识点,如果我们用到了I/O的引脚复用功能,还要开启复用功能时钟 例如:GPIOC的Pin4可以作为ADC1的输入引脚,那么我们现在要使用ADC1,除了要开启GPIOC的时钟外,还要开启功能时钟
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_ADC1, ENABLE);
这样ADC1的功能才可以被使用

3,配置引脚,引脚的话是根据原理图的,因为这里面的GPIO_Pin_X都是做了宏定义,(具体可以按F12去看)所以可以做一个或运算,把需要的都打开。

4,工作的方式为推挽输出,这里的GPIO_Mode_Out_PP是一个枚举类型,里面有8种模式(输入4种,输出4种,具体可以按F12去查阅,这个模式是根据自己需求去配置的)。

5,配置输出的频率了,GPIO_Speed_50MHz也是一个枚举类型里面还有GPIO_Speed_10MHz GPIO_Speed_2MHz,只有在引脚做输出的时候才需要频率配置。

6,就是将配置好的结构体,作为形参传进GPIO_Init()中,GPIOC是STM32里面GPIO的某一个组,具体在哪里,可以查阅数据手册。

7,因为这里是一个LED的初始化,所以我们必须一开始就把灯弄灭,我们直接调用GPIO_SetBits(),并且把需要配置的引脚都传进去,记住还要传在那个组。

8,之后在mian函数里面,我们只需要将以上的引脚都拉低GPIO_ResetBits(),即可做一个亮灯的操作,做一个拉高拉低的循环,就是一个流水灯了。

由以上总结得出,我们在配置GPIO口的时候,只要对GPIO_InitTypeDef这个类型的结构体做里面的成员赋予不同的值,就可以对GPIO进行不同的配置了,而里面的这些值,都是STM32库提供好的,我们只需要根据自己实际需求,做相对应的配置即可,这样我们的开发方式是不是变的相当简单了!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值