前言
在这章本人将使用STM32F103RCT开发板,使用板上自带小灯进行点灯试验。GPIO采用推挽输出的方式驱动电路,点亮小灯。
具体如何添加库函数不在此赘述,网上有很多大可翻阅。
目录
1、LED介绍
这个是二极管的原理图符号,二极管由于结构的特殊性呈现为单向导电性,只能正极流入负极流出才可导通,导通之后电阻值很小几乎为零。
反过来便会呈现出很大的阻抗无法导通,除非强行击穿。若是强行击穿,普通二极管便会报废(换新的吧),也有利用其反向击穿特性的二极管对电路进行保护,如:稳压二极管等。
这是LED(发光二极管)实物图,在正常情况下,长脚为正极,短脚为负极。
2、LED电路
LED 不直接 和电源相接,电路中一定会有电阻配合。原因有以下两个:
- 调节LED亮度。可以通过电阻阻值调节电路中电流的大小,从而调节LED亮度。
- 保护电源电路。上边说过当LED导通之后电阻值很小几乎为零,那么电路中相当于没有用电器消耗,直接回到了电源,会直接将电源烧毁。
电源内部可以等效为一个恒压源和很小的电阻(电源的内阻)的串联,每个电源都有最大负载能力,当电流不经负载回负极时,由于电源的内阻一般都很小,这样回路就会有很大的电流,整个功率都消耗在电源自身上,电源会急速升温过热而损坏,同时因电流过大超过了其允许的范围电源也会损坏。
以下是本人买单片机时,问淘宝客服要的原理图其中LED部分电路。
表示电源电压为3.3V。
表示为 发光二极管。
表示这个电路连接在单片机的 PA8引脚 。
这种方式被称为共阳极接法,PA8引脚 需要提供 低电平 才可点亮这个LED,一般都使用这种方式驱动。
3、检查基础程序是否正确
在添加好基础库函数后,在主程序中右键添加头文件,写上主函数。
#include "stm32f10x.h" // Device header
int main(void)
{
while (1)
{
}
}
编译无错误
在此需要注意的是,最后一行 一定 要空一行,不然会有报错。
3、点亮LED所需操作步骤
3.1.RCC开启GPIO时钟
在rcc库文件中找到APB2外设时钟函数,复制到主函数页面。
括号中的内容可以右键跳转到定义一一查找填入。
因为需要点亮PA8口的LED,所以第一个参数选择 RCC_APB2Periph_GPIOA。
第二个参数选择 ENABLE。
这样RCC函数就配置完成,时钟就开启了。
3.2 使用GPIO_Init函数初始化GPIO
初始化GPIO
在GPIO库文件中找到GPIO_Init函数,复制到主函数页面。
继续翻阅库函数填入括号内的参数,第一个参数填入所需要使能的GPIO口,我们这里是PA8所以使能GPIOA。
第二个参数是结构体,放置在刚才 GPIO_Init 上面。
红框表示刚才复制的结构体函数,黄框表示这个结构体起的名字。
这个结构体相当于一个局部变量,在一些老的编译器中,要求所有的局部变量定义必须放在函数的最前面(RCC之上)。因为我这个编译器支持在中间,所以可以放在这里。
接下来复制结构体名字,用点把结构体成员全部引出。
选择模式
依旧右键跳转到定义、看说明、复制粘贴参数。
搜索选中的这个参数,搜索范围为当前项目。
会显示出上节讲过的八种工作模式。
因为我们准备使用的是推挽输出,所以复制OUT_PP这一项。
配置引脚
同样跳转定义,选择member。
选择好要搜索的,继续当前项目搜索。
因为我们使用的是8号引脚所以,选择 GPIO_Pin_8。
选择速度
还是一样的套路,输出速度,选择50MHz就好。
放置Init地址
最后将初始化Init的地址放到GPIO_Init的第二个参数,这样初始化就完成了。
3.3 使用输出或者输入函数控制GPIO口
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
这个函数可以把指定端口的电平选择为高电平。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
这个函数可以把指定端口的电平选择为低电平。
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
这个函数前两个参数也是指定端口,第三个参数是可以根据设定的值设置指定端口。
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
这个函数第一个值选择外设,第二个值可以同时对16个端口进行写入操作。
4、点亮LED程序
4.1ResetBits小灯点亮
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
使用第二个低电平操作,编译后没有报错。
下载到板子中,D1点亮(不用管D2,它是常亮)。
4.2 SetBits小灯熄灭
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
选择高电平操作,小灯熄灭。
4.3 WriteBit
这个函数中的第三个值可以查看库函数中的介绍来选择。
- Bit_RESET:清除端口置,置为低电平。
- Bit_SET:设置端口置,置为高电平。
4.3.1 Bit_RESET
小灯点亮
4.3.2 Bit_RESET
小灯熄灭
5、总结
1.初始化端口流程一定需要多练习,此为标准流程,每次驱动端口时就一定会初始化端口。
2.点亮LED还会有各种方式,这是是其中两种,其余方式可以自行研究。