stm32设置IO输出

举一个最简单的例子,用推挽模式下的IO控制led
首先我们先找一个新建工程模板放置于你的常用work_place文件夹。然后打开模板的user文件夹双击图标:
在这里插入图片描述
进入之后选中工程然后右键(如下图):
在这里插入图片描述
选择Manage project Items新建一个文件分组叫HARDWARE用来存放初始化硬件外设的.c和.h文件。
然后此时我们要到工程根目录下创建一个同名文件夹(因为虽然在软件中新建了一个分组,但是并不会在工程根目录下新建这样一个文件夹)。然后我们就可以编写led.c和led.h文件了:
在这里插入图片描述
在这里插入图片描述
当然在led.h里可以用条件编译,但是这个例子很简单,没必要用条件编译。
接下来就是分析led.c:
首先引用的stm32f10x.h这个头文件是处处都要用的。
GPIO_InitTypeDef gpio_init_structure作用就是定义一个GPIO_InitTypeDef类型的结构体变量。如果把这个定义放在时钟使能之后就会报错!

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
这两行代码作用是使能GPIOB 5,GPIOE 5(因为led挂载在这两个IO口)。

接下来就是使用GPIO_Init函数初始化GPIO,其作用为设置IO的模式,速度等等。这个函数有两个入口参数,在这里插入图片描述
我们可以到达该函数的定义处查看该函数的信息(主要是看该函数的入口参数的有效值):
源码(只截取了一部分)在这里插入图片描述
我们可以看到两个参数都是结构体指针。要查看入口参数的有效值可以:
在这里插入图片描述
可以看到第一个入口参数有效值为:
在这里插入图片描述
第二个参数:在这里插入图片描述
在这里插入图片描述
可以看出,该结构体规定IO,模式,速度。其中的变量取值见:
在这里插入图片描述

GPIO_SetBits用来指定GPIOX的某个IO置为1,reset就是置0;
这里可能有人对GPIO_Init(GPIOB,&gpio_init_structure)不理解。两个入口参数都是结构体指针类型,为什么第二个参数要取地址?那是因为我们传入的是个结构体变量,对它取地址就是相当于定义了一个结构体指针,因为指针就是代表一个地址,该地址就是它所指向的变量的地址。

接下来我们在main.c中调用方法就行了:
在这里插入图片描述
编译之前要先引入头文件路径,如下图:
在这里插入图片描述
在这里插入图片描述
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
接下来再说说位操作。位操作就是将某个寄存器的一个位映射为一个32的地址,通过对该地址的操作就可实现对位的操作,不用太深究(有映射公式。可以百度一下),下面举例用位操作如何操作IO(这也是位操作的最常用的作用)
其他文件都不变,只需要修改main.c为:
在这里插入图片描述
PXout(n)就是用宏定义的方式规定了映射关系,详情在sys.h中可以找到,不用深究。

发布了74 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/naruhina/article/details/97396848