基于寄存器与基于固件库的stm32 LED流水灯

一、基于STM32标准库函数的LED流水灯实验

STM32标准库函数简要介绍及与寄存器编程的区别
STM32标准库是一套由STMicroelectronics提供的软件库,用于简化STM32微控制器上开发应用程序的过程。它包含了许多常用的函数和驱动程序,可用于配置和操作STM32微控制器的各种硬件资源。

STM32标准库函数可以分为几个主要类别:
系统初始化函数:用于初始化系统时钟、中断向量表和其他系统设置。
GPIO函数:用于配置和操作通用输入/输出端口,包括设置引脚方向、读取和写入引脚状态等。

外设驱动函数:用于配置和操作各种外设,如串口、SPI、I2C等。这些函数包括初始化外设、发送和接收数据等。
中断处理函数:用于配置和处理中断。它们允许您定义中断服务函数,并将其与特定的中断源关联起来。
与寄存器编程相比,STM32标准库函数的主要优势在于简化了开发过程。使用标准库函数,您可以通过调用封装好的函数来配置和操作硬件资源,而无需直接访问寄存器。这样可以减少编写大量底层代码的工作量,并提高开发效率。

1.1 新建工程

我们首先打开keil MDK,点击“NEW PROJECT"
在这里插入图片描述
命名好工程名字,文件路径。(建议工程名字使用英语)。完成后,选择STM32F103C8T6。
在这里插入图片描述
eg:在线添加库文件
用寄存器控制 STM32 时,不需要在线添加库文件,可以直接关掉。

1.2添加文件

①添加已经存在文件
在新建的工程中添加启动文件(startup_stm32f10x_hd.s),该文件可以先到固件库中复制到此处startup_stm32f10x_hd.s。
②创建新文件
stm32f10x.h
手动新建,用于存放寄存器映射的代码,暂时为空。
main.c

1.3 新建组与库函数文件的添加

进入工程界面,点击魔术棒右边的三个箱子的图案。这是用来管理分组的。

进入管理界面,在中间添加四个组,名字命名为Start,Library,User,System。
在这里插入图片描述

同时,我们在工程对应文件夹中也新建同名的这些文件。
所有配置函数需要在ST官网进行下载:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html

1.4修改头文件位置

此外,我们还需要修改一下头文件路径,这样编译器才能找到我们所添加的函数
点击魔术棒,选择C/C++,在“Define”栏中写上如下字符
在这里插入图片描述

随后点开“Include Paths”右边的三个点,在窗口中将我们的Start,Library,System文件都添加进去。
在这里插入图片描述

然后我们在keil中点击每个组,将本地文件夹里对应的文件添加到组里面,添加结果如下所示
在这里插入图片描述

在这里插入图片描述

1.5程序主函数最终代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"



int main(void)
 {
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//控制GPIOA的时钟,使其处于使能状态
	
	//配置GPIOA
	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体GPIO_InitStructure,GPIO_InitTypeDef是定义结构体声明,在Library中的gpio.h头文件中可以找到
	
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽输出模式
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_0;//打开GPIOA的0123引脚
	
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置输出速度为50MHZ
	
	GPIO_Init(GPIOA, &GPIO_InitStructure);//GPIO_Init是配置GPIO口函数,将结构体取地址输入到函数参数中,配置完成
	
	while (1)
	{
		
		GPIO_Write(GPIOA, ~0x0001);	//16进制转2进制为,0000 0000 0000 0001,按位取反,A0输出低电平
		Delay_ms(1000);//延时1000ms,也就是1秒
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010,同上原理,,A1输出低电平
		Delay_ms(1000);
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,同上原理,,A2输出低电平
		Delay_ms(1000);
		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,同上原理,,A3输出低电平
		Delay_ms(1000);
		
	}
}

1.6硬件电路最终结果

QQ视频20231016185122

二、基于寄存器stm32 LED流水灯

2.1启动文件

名为startup_stm32f10x_hd.s的文件,它里边使用汇编语言写好了基本程序,当STM32 芯片上电启动的时候,首先会执行这里的汇编程序,从而建立起 C 语言的运行环境,所以我们把这个文件称为启动文件。该文件使用的汇编指令是 Cortex-M3 内核支持的指令:
在这里插入图片描述

2.2 stm32f10x.h 文件

在编程之前我们要先实现寄存器映射,有关寄存器映射的代码都统一写在 stm32f10x.h文件中,见代码:
在这里插入图片描述

2.3 main 文件

此时直接编译的话,会出现错误:
Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x.o)
还有一个方法就是在启动文件中把有关SystemInit
的代码注释掉也可以,具体操作如下:
在这里插入图片描述

2.4GPIO模式

首先我们把连接到LED灯的GPIO引脚PBO 配置成输出模式,即配置 GPIO 的端口配置低寄存器 CRL,在这里我们把 PB0 配置为通用推挽输出,输出的速度为 10M.

在输出模式时,对端口位设置/清除寄存器 BSRR 寄存器、端口位清除寄存器BRR和ODR 寄存器写入参数即可控制引脚的电平状态,其中操作 BSRR和 BRR最终影响的都是ODR 寄存器,然后再通过ODR 寄存器的输出来控制GPIO

2.5 创建leddd.c文件

在source group里创建leddd.c
请添加图片描述
写入代码,注意项目结构,使用的引脚是PA7,PB9,PC15,同时如果灯不闪烁,程序没有正常运行,可以先试试仿真调试,仿真调试正常了一般在板子上运行就正常

需将将boot0设为1,boot1设为0,利用跳线帽实现。请添加图片描述
借助FLYMCU下载软件,即可将test3.hex载入。请添加图片描述

2.6 烧录展示

QQ视频20231016185122

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值