STM32寄存器和库函数点灯
- 一、寄存器操作
-
-
- 1、新建工程,新建一个目录存放以后所有的工程stmproject,在这个目录下新建文件夹寄存器点灯,文件名为LED。
- 2、新建文件main.c并双击source group文件夹添加进去
- 3、添加启动文件,取官方固件库中根据FLASH大小选择型号,我选大容量hd
- 4、编写main程序通过寄存器控制I/O口输入输出点灯
-
- 使能时钟
- 配置端口寄存器,再通过端口寄存器输出数据
- 总结
-
- 二、库函数点灯
-
- 1 建立库函数工程模板
- 2 新建库函数点灯工程
- 3 调用库函数编写程序点亮
- 4 程序升级
一、寄存器操作
1、新建工程,新建一个目录存放以后所有的工程stmproject,在这个目录下新建文件夹寄存器点灯,文件名为LED。
如果需要安装别的安装包可以在这个网址下载。点击打开文件
2、新建文件main.c并双击source group文件夹添加进去
3、添加启动文件,取官方固件库中根据FLASH大小选择型号,我选大容量hd
复制到点灯文件夹后再添加进source group
4、编写main程序通过寄存器控制I/O口输入输出点灯
使能时钟
下面写出代码
配置端口寄存器,再通过端口寄存器输出数据
stm32因为引脚太多,所以把引脚分成了几组,每组最多16个引脚,其中32位端口配置低寄存器控制低八位引脚,32位端口配置高寄存器控制高八位引脚。本次只用到了低八位
每个引脚分为配置位和模式位4位来配置,首先确定模式位是输入还是输出,再确定输入和是输出模式下具体的模式。上图可以得到端口的起始地址和偏移地址。代码如下:
再用端口输出寄存器使PB5和PE5输出低电平(由pcb图可直),由下图可知偏移地址0x0C
代码如下:
最后把程序下载到单片机里即可点亮两个小灯。
总结
1、首先新建工程时,需要启动文件,main里需要一个系统时钟。
2、STM32引脚多,为节约资源,每个引脚都需要开启对应时钟。
3、点亮LED主要是控制GPIO输出高电平或低电平,需要GPIO寄存器来实现。
4、置零,置一技巧
某几位置零 &=~(x<<y)
某位置一 |=(x<<y)
5、各种地址可以用宏定义表示出来放在一个头文件里,这样程序可读性更高,以后库函数变成就这样,结构相同需要重复的还可用结构体表示。如
二、库函数点灯
1 建立库函数工程模板
-
在stmproject文件夹下新建Template文件夹,并新建 USER,CORE,OBJ ,STM32F10x_FWLib这几个文件夹用于装需要的库文件。
注:hd代表大容量,根据自身的芯片容量选取。 -
STM32F10x_FWLib文件夹下需要找到两个文件夹并复制进来,在这条路径下:
STM32F1xx固件库STM32F10x_StdPeriph_Lib_V3.5.0Libraries STM32F10x_StdPeriph_Driver
-
OBJ里存放编译完的文件。
到此为止,模板就建成了,以后需要建立工程之前可以直接复制一份改个名字。
2 新建库函数点灯工程
- 把Template复制一份并改名为库函数点灯
- 打开keil5,点击new uVision project ,把工程文件放在库函数点灯下的USER里,取名为LED,然后弹出界面选择自己的芯片,点击ok。
这三个组分别把之前复制到同名文件夹下的.c文件添加进来,CORE多添加了一个启动文件。 - 点击魔术棒进入工程配置
先配置文件输出,点击output,选择OBJ为输出文件夹
5. 再USER文件夹中添加main.c文件,写下如下代码,点击编译,不报错就可以进行代码编写了。
7. 再按照第三步添加HARDWARE组,组里添加led.c,
添加完写下编译一下点左边加号就会有led.h,还需要配置一下C/C++选项卡include paths使得可以被找到。
- 先进入rcc的头文件寻找APB2外设时钟使能的函数
点击右键可以回到函数的定义看到函数的参数怎么填
由于这个函数第二个参数是一个结构体,所以我们需要用这个结构体实例化一个对象,所以可以右键转到结构体的函数定义。
3. 编写led.c,把PB5和PE5时钟使能,并配置输入输出模式- 编写led.h
- 编写main.c,调用初始化函数,并通过复位和置位函数控制灯的亮灭
来源:jiaxierhhh
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
- 先进入rcc的头文件寻找APB2外设时钟使能的函数