目录
- 一、原理简介
-
- 1.1 原理图
- 1.2 GPIO功能描述简介
- 1.3 硬件连接
- 二、代码实现与原理分析(详细)
-
- 2.1 代码实现
- 2.2 配置步骤
- 2.3 原理分析
-
- 2.3.1 GPIOx_CRL、GPIOx_CRH
- 2.3.2 GPIOx_BRR、GPIOx_BSRR
- 三、仿真测试
-
- 3.1 软件逻辑分析仪DEBUG
- 3.2 硬件效果
- 四、小结
写在前面的话:前面我们对新建工程文件以及STM32的时钟配置做了讲解,相信大家都有了一定的了解,对代码的大致框架以及STM32内部的时钟有了深入的认识,本次入门的第一讲最基础的就是对端口GPIO的应用。
一、原理简介
1.1 原理图
首先我们先看一下自己的STM32开发板的原理图,以我使用的为例如图所示:
1.3 硬件连接
led.h:
main.c:
main.h:
这是我们本节文章实现需要用到的代码,编译测试无错误无警告可以正常使用
2.2 配置步骤
第一步:首先先来看在我们的led.c里面初始化LED的函数led_init();我们要使用引脚这时候就需要对引脚进行初始化操作,我们从ST标准库中找到GPIO有关的头文件:stm32f10x_gpio.h,按照之前讲过的方法先打开头文件拉到文件最底下找函数,眼睛一瞥找到了这个叫GPIO_Init的函数,如图:

可以看到在GPIO_Init函数内部通过框框里的三个函数来验证输入参数的合法性,通过一次跳转①②③可以查看我们需要输入的参数的规范,如下为配置的LED引脚:
引脚 为GPIO_Pin_0(我们LED的引脚是GPIOB.0),引脚模式为GPIO_Mode_Out_PP(推挽输出),引脚速度为GPIO_Speed_2MHz(2MHz)
引脚模式 | 说明 |
---|---|
GPIO_Mode_AIN | 模拟输入 |
GPIO_Mode_IN_FLOATING | 输入浮空 |
GPIO_Mode_IPD | 输入下拉 |
GPIO_Mode_IPU | 输入上拉 |
GPIO_Mode_Out_OD | 开漏输出 |
GPIO_Mode_Out_PP | 推挽输出 |
GPIO_Mode_AF_OD | 复用开漏输出 |
GPIO_Mode_AF_PP | 复用推挽输出 |
本次我们选用的是推挽输出,推挽输出和开漏输出的最大区别是,推挽输出可以输出高低电平,但是开漏输出只能输出低电平若要输出高电平需要外接上拉电阻,我们点亮LED灯需要高低电平的切换因此选择推挽输出,有关这两种输出方式后续的文章会写到。 | |
对于输出速度的选择,我们使用的最低的2MHz,这里因为控制LED对信 带宽没有要求,因此选择速度低功耗也小。 | |
最后只需调用初始化函数就可以将引脚口初始化了: |
第二步:在使用GPIO端口前以及STM32任何外设前,我们都需要开启对应外设的时钟,通过上一讲时钟的讲解我们知道GPIOB挂载在APB2下,因此我们在stm32f10x_rcc.h中找到对APB2时钟设置的函数RCC_APB2PeriphClockCmd,如图进行开启GPIOB口的时钟:
第三步完成以上两部后我们的LED引脚初始化就算是完成了,最后我们通过给LED引脚给高电平使其初始化后保持熄灭的状态。
2.3 原理分析
2.3.1 GPIOx_CRL、GPIOx_CRH
以上的函数配置我们都没有直接对我们说的GPIO的寄存器进行操作,这是因为ST标准库已经对寄存器进行了封装,我们调用的函数其实最底层完成的工作就是的对寄存器进行读写操作,接下来我们看一下我们在初始化引脚的时候对究竟对什么寄存器进行了什么操作。
我们来看GPIO_Init(GPIOB, &GPIO_LED);究竟做了什么事情
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!