江科大stm32之“点灯大师”

声明:文章中出现的资料多数来自江科大视频资料,本文是我学习stm32的随手笔记

目录

一、准备

二、实现星星点灯

1、接线图

2、原理

3、步骤

(1)使用RCC开启GPIO时钟

(2)使用GPIO_Init函数初始化GPIO

(3)用输出或者输入函数控制GPIO口

三、点灯大师

一、准备

本次学习内容是经典的点灯入门到成为能实现流水灯的“点灯大师”

先新建一个工程

同时在工具选项中把Debug设置为stlink

有关工程创建过程可以移步到我上一篇笔记:https://blog.csdn.net/weixin_61968569/article/details/135986156?spm=1001.2014.3001.5501

二、实现星星点灯

1、接线图

所需配件:面包板,四根跳线,一个LED(长脚正极,短脚接负极),stlink

2、原理

要实现IO口的输出,一般有三个步骤:

(1)使用RCC开启GPIO时钟

(2)使用GPIO_Init函数初始化GPIO

(3)用输出或者输入函数控制GPIO口

3、步骤

(1)使用RCC开启GPIO时钟

图1 GPIO基本结构

由图1可知,若LED接A0口,需要用到APB2外设GPIOA,打开库函数后缀名为rcc.h

图2 rcc.h

不难找到 RCC_APB2PeriphClockCmd,该函数作用是开启时钟,将其复制粘贴到主函数中,右键定位,可查看所需参数

图3 rcc.c

结合图1可以得知,我们需要使用到APB2外设GPIOA,同时第二个参数起使能—ENABLE

(2)使用GPIO_Init函数初始化GPIO

时钟打开后,就要进行GPIO口的初始化,我们先使用GPIO_Init();    查看所需要的参数

图4 GPIO_Init

由图4可知,我们需要传入一个GPIOx 和 GPIO_InitStruct的结构体,那么就简单了,右键GPIO_InitTypeDef定位

图5 InitTypeDef

如图5所示,结构体里有三个变量,则初始化如下:

图6 初始化变量

对于变量如何详细初始化,这里我介绍其中一个步骤,其余类似:

图7 Mode

初始化的时候一步一步来,先定位Mode,如图8所示

图8 定位

选中蓝色标注的GPIOMode_TypeDef,按住ctrl+f,如图9所示

图9 Mode_TypeDef

这里介绍一下mode各个定义:

AIN是模拟输入

IN_FLOATING是浮空输入

IPD 下拉输入

IPU 上拉输入

OUT_OD 开漏输出

OUT_PP 推挽输出

AF_OD 复用开漏

AF_PP 复用推挽

(3)用输出或者输入函数控制GPIO口
/*设置PA0引脚的高低电平,实现LED闪烁,下面展示3种方法*/
		
		/*方法1:GPIO_ResetBits设置低电平,GPIO_SetBits设置高电平*/
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);					//将PA0引脚设置为低电平
		Delay_ms(500);										//延时500ms
		GPIO_SetBits(GPIOA, GPIO_Pin_0);					//将PA0引脚设置为高电平
		Delay_ms(500);										//延时500ms
		
		/*方法2:GPIO_WriteBit设置低/高电平,由Bit_RESET/Bit_SET指定*/
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);		//将PA0引脚设置为低电平
		Delay_ms(500);										//延时500ms
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);			//将PA0引脚设置为高电平
		Delay_ms(500);										//延时500ms
		
		/*方法3:GPIO_WriteBit设置低/高电平,由数据0/1指定,数据需要强转为BitAction类型*/
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);		//将PA0引脚设置为低电平
		Delay_ms(500);										//延时500ms
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);		//将PA0引脚设置为高电平
		Delay_ms(500);										//延时500ms

注意要添加Delay.h

三、点灯大师

取反符号可以自己尝试一下加或者不加,有不同的效果,大致思路是一样的,就是Pin的引脚需要全部赋值,而不是单纯赋值0号引脚,接着就是GPIO函数的调用,需要自行体会

#include "stm32f10x.h"
#include <Delay.h>
int main(void){
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打开时钟
	GPIO_InitTypeDef GPIO_InitStruct;//初始化结构体
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;				//GPIO引脚,赋值全部引脚
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHz
	GPIO_Init(GPIOA,&GPIO_InitStruct);	
	while(1){
		GPIO_Write(GPIOA,~0x0001);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0002);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0004);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0008);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0010);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0020);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0040);
		Delay_ms(100);
		GPIO_Write(GPIOA,~0x0080);
		Delay_ms(100);
	}
}

  • 39
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值