IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【STM32】STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲 -> 正文阅读

[嵌入式]【STM32】STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲

【STM32】STM32标准库与HAL库对照学习教程一--使用寄存器操控LED闪烁详讲


前言

本教程文章是我在学习STM32标准库和HAL库后写的,想通过标准库与HAL库的对照学习加强我对STM32的理解与使用,让自己对STM32的认识不只会停留在表面,出文章的目的是为方便自己记录以及相帮助跟多的人学习单片机,本篇文章先介绍寄存器的使用,在以后的章节中会使用库函数开发,有问题的地方希望大家在评论区指出。

前期准备
1、STM32F103(我用的是普中的Z200板)
2、IDE Keil5(MDK-ARM)软件
3、STM32固件库、STM32数据手册、STM32中文参考手册、开发板原理图(参考自己的开发板)

所需文件百度网盘链接:https://pan.baidu.com/s/1bYdnK9j6b8ze4wAFs0FRdQ
密码:6muu

keil软件的安装网上有很多,这里我就不过多介绍了。

一、新建工程

1、打开keil5,点击左上方Project,选择New uVision Project,文件自己命名,点击保存,我这里是已建好的文件。
在这里插入图片描述
2、选择自己的芯片型号,这里我的是STM32F103ZE,点击OK。
在这里插入图片描述

如果没有需要自己在软件中或者在官网上下载,这里不过多介绍

3、点击Cancel退出
在这里插入图片描述
4、添加起动文件
启动文件是 startup_stm32f10x_hd.s 这个文件,在我网盘文件:STM32最新固件库v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
这个路径下。
在这里插入图片描述
选择复制并粘贴到自己所创的文件下。
在这里插入图片描述
右键左侧文件目录选择第3个选项,找到启动文件并添加,文件类型选择All files。
在这里插入图片描述
4、新建main.c文件
右键左侧文件目录选择第2个选项,选择C文件并命名为main.c,点击Add。
在这里插入图片描述
到这里文件建立结束

二、寄存器讲解

1、什么是寄存器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或
用户分配,给存储器分配地址的过程称为存储器映射,如果
再分配一个地址就叫重映射。

stm32f103芯片总共有4个G的内存,内存被分为了8块,每块具有512M的内存,分别被分配了自己的功能地址。
在这里插入图片描述

详情可以在我发布文件的STM32中文参考手册第28页。

2、寄存器的程序控制
要使用特定的功能需要用 “*” 取出相应功能地址中的值,然后进行位操作,例如:

*(unsigned int *)0x40021018 |=(1<<3);

由于STM32是32位处理机,因此在地址中取出的值是32位,后面会继续讲到。

三、使用寄存器配置引脚

1、STM32引脚的说明
stm32引脚与51单片机的引脚不同的地方是,51单片机可以直接控制输入输出,而32单片机需要打开对应的引脚时钟,配置输入和输出模式,再配置引脚的电平。因此STM32引脚寄存器的配置步骤为:
(1)打开GPIO引脚时钟
(2)配置输入和输出模式
(3)配置电平
对于本开发板的引脚,分为A、B、C、D、E、F、G类,每类最多16个引脚,为什么是16个一会儿说。

2、LED原理图
在这里插入图片描述
在这里插入图片描述
这里请参考自己开发板的原理图
我们选择LED1进行配置,当LED1的引脚为低电平时,电流流通发光二级管,小灯点亮,反过来一样。

3、LED1引脚配置
(1)B类引脚时钟使能配置
引脚时钟地址RCC的范围
在这里插入图片描述

图片在发布文件的32数据手册第38页

在这里插入图片描述

图片在发布文件的STM32中文参考手册第70页

APB2外设时钟使能地址=基地址+偏移地址

基地址是RCC的范围首地址0x4002 1000,偏移地址是0x18。
因此RCC地址=0x4002 1000+0x0000 0018 = 0x4002 1018
在这里插入图片描述
上图是指针地址取出的数据,可以看出是32位,每位对应不同功能的时钟,我们需要B类引脚的时钟,在第三位,让这个位为1就可以使能B类引脚的时钟了。因此操控程序为:

*(unsigned int *)0x40021018 |=(1<<3);

(2)PB5引脚(B类第5引脚)功能配置在这里插入图片描述

图片在发布文件的STM32中文参考手册第28页

从上图这里可以知道B类引脚的首地址(基地址)是0x4001 0C00
在这里插入图片描述
在这里插入图片描述

图片在发布文件的STM32中文参考手册第113、114页

为什么引脚寄存器会有低寄存器和高寄存器之分呢?
原因是地址取出的数据是32位,每4位为一组代表一个引脚,其中低两位为输入输出模式配置
在这里插入图片描述
另外高两位为引脚输入模式的上下拉配置
在这里插入图片描述
因此低端寄存器配置0-7引脚,高端寄存器配置8-15引脚,总共16个引脚,这就是为什么每类引脚只能有16个。
PB5引脚在低端寄存器配置。
低端寄存器地址=B类引脚基地址+偏移地址=0x4001 0C00 + 0x00=0x4001 0C00
控制程序为:

*(unsigned int *)0x40010C00 &=~(0x0F<<(4*5));  //先清零
*(unsigned int *)0x40010C00 |=(1<<(4*5));      //在置位

(3)配置PB5引脚(B类第5引脚)输出低电平
在这里插入图片描述

图片在发布文件的STM32中文参考手册第115页

由上图可以看出,取出数据的第5位是PB5,让这个为置0就可以让PB5引脚输出低电平。
端口输出寄存器地址=B类引脚基地址+偏移地址=0x4001 0C00+0x0C=0x4001 0C0C
控制程序为:

*(unsigned int *)0x40010C0C &=~(1<<5);

到这里引脚的寄存器配置算讲完了。

4、整体程序

(1)延时函数

/*************************************************
*函数名:delay()
*函数功能:延时函数,通过while循环占用CPU,达到延时功能
*输入:i
*返回值:无
**************************************************/
void delay(int i)
{
	while(i--);
}

(2)初始化空函数

void SystemInit(void)  
{

}

这个是启动文件运行使要调用的函数,必须要,在后面章节使用库函数时,其它文件有,但在本节课程里,必须要在main.c文件中给出。
(3)主函数

int main()
{
	*(unsigned int *)0x40021018 |=(1<<3);   //打开GPIO时钟
	*(unsigned int *)0x40010C00 &=~(0x0F<<(4*5));  //配置输出模式,先清0,在置位
	*(unsigned int *)0x40010C00 |=(1<<(4*5));
	*(unsigned int *)0x40010C0C &=~(1<<5);    //配置输出低电平
	
	while(1)
	{
		delay(0xFFFFF);
		*(unsigned int *)0x40010C0C |=(1<<5);//高电平
		delay(0xFFFFF);
		*(unsigned int *)0x40010C0C &=~(1<<5);//低电平
	}
}

5、程序烧入

(1)配置生成hex文件
点击魔术棒
在这里插入图片描述
点击生成hex文件
在这里插入图片描述
(2)程序烧入
我这里使用普中提供的烧入软件烧入
在这里插入图片描述
6、实验结果
在这里插入图片描述

到此寄存器配置的介绍基本讲完,接下来正式进入标准库与HAL的对照学习中,后面会进行更新。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:20:51  更:2021-10-21 12:33:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:18:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码