STM32学习日志2 —— 点灯试验

        前言

        在这章本人将使用STM32F103RCT开发板,使用板上自带小灯进行点灯试验。GPIO采用推挽输出的方式驱动电路,点亮小灯。

        具体如何添加库函数不在此赘述,网上有很多大可翻阅。

目录

        前言

1、LED介绍

2、LED电路

3、检查基础程序是否正确

3、点亮LED所需操作步骤

        3.1.RCC开启GPIO时钟 

        3.2  使用GPIO_Init函数初始化GPIO

        初始化GPIO

        选择模式         

        配置引脚

        选择速度 

        放置Init地址

        3.3  使用输出或者输入函数控制GPIO口

4、点亮LED程序

        4.1ResetBits小灯点亮

        4.2 SetBits小灯熄灭

4.3 WriteBit

4.3.1 Bit_RESET

 4.3.2 Bit_RESET 

5、总结

6、参考资料(以下排序不分先后)


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还会有各种方式,这是是其中两种,其余方式可以自行研究。

6、参考资料(以下排序不分先后)

【1】发光二极管_百度百科 (baidu.com)

【2】江科大 [3-2] LED闪烁&LED流水灯&蜂鸣器_哔哩哔哩_bilibili

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于STM32GPIO输出实验,点亮三色LED,您可以按照以下步骤进行操作: 1. 首先,您需要在STM32的开发环境中创建一个新的工程。 2. 在工程中,您需要包含相应的头文件,如"stm32f10x.h"。 3. 接下来,配置相应的引脚为输出模式。假设红色LED连接到GPIOA的Pin0引脚,绿色LED连接到GPIOA的Pin1引脚,蓝色LED连接到GPIOA的Pin2引脚,您可以使用以下代码进行配置: ``` GPIO_InitTypeDef GPIO_InitStructure; // 使能GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置红色LED引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置绿色LED引脚 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); // 配置蓝色LED引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ``` 4. 现在,您可以使用相应的寄存器来控制LED的点亮和熄灭。例如,要点亮红色LED,可以使用以下代码: ``` GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将Pin0引脚置高,点亮红色LED ``` 要熄灭红色LED,可以使用以下代码: ``` GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 将Pin0引脚置低,熄灭红色LED ``` 同样的方法,您可以控制绿色和蓝色LED的点亮和熄灭。 这就是点亮三色LED的基本步骤。希望对您有所帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值