STM32F103实现点灯(固件库方式)

参考:stm32上实现点灯
作者:SKY丶丿平才
发布时间: 2021-03-20 16:51:06
网址:https://blog.csdn.net/weixin_48264057/article/details/115028724

前言

其实和寄存器点灯是一样的,只不过库函数将寄存器都封装在结构体里面了,我们只需调用这些结构体就好了。

本篇博文将要介绍的是控制ALIENTEK (正点原子)探索者STM32F4 开发板上的两个 LED 实现一个类似跑马灯的效果,该实验的关键在于如何控制 STM32F4 的 IO 口输出。了解了 STM32F4 的 IO 口如何输出的,就可以实现跑马灯了。通过这一章的学习,你将初步掌握 STM32F4 基本 IO 口的使用,而这是迈向 STM32F4 的第一步。

一、硬件设计

本次实验用到的硬件只有 LED(DS0 和 DS1)。其电路在 ALIENTEK 探索者 STM32F4 开发板上默认是已经连接好了的。DS0 接 PF9,DS1 接 PF10。所以在硬件上不需要动任何东西。其连接原理图如下图:
在这里插入图片描述

二、软件设计

下面展示的是代码的编写,具体结构体里面的函数寻找过程,参照这篇博文:STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结,在库函数点灯部分有专门讲解。

1.建立工程

这是江江的视频教程:
在USER文件夹下创建LED文件夹,文件夹内创建 led.c 和 led.h 文件,然后通过 keil 将 led.c 添加到项目工程,编译一下,led.h自动包含进来了。在这里插入图片描述
led.h
在这里插入图片描述
led.c
在这里插入图片描述
main.c
在这里插入图片描述

在keil5中建立好如下图所示的工程:

在这里插入图片描述

2.代码编写

我们需要在三个文件中编写代码,其他添加进去的文件都是固件库自带得,这里我们使用调库的方式来实现点灯。

首先是在led.c文件中,这是我们的点灯文件,主要是定义一个初始化函数

led.c

#include "led.h" 

void LED_Init(void){    
	
  GPIO_InitTypeDef  GPIO_InitStructure;//结构体定义要在时钟之前   通过“.”访问结构图内部成员变量

  //1、使能APB2的时钟GPIC(视频课程中)
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟

  //2、结构体配置
  //GPIOF9,F10初始化设置  视频课程中就配置了前三个结构体成员变量 没指定上拉
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz  点灯的话频率随便选一个就好了
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
	
  GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO
	
  GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIO电平拉高函数  GPIOF9,F10设置高,灯灭

}

随后是led.h文件,这里要对定义的函数做声明以及定义好两个io口

led.h

#ifndef __LED_H
#define __LED_H  //这两步骤  条件编译

#include "sys.h"
//include "stm32f10x.h"  视频课程中用的板子包含这个头文件
	


//LED端口定义 这两个分别是GPIO电平拉低拉高函数,视频课程中没有这一步。
#define GPIO_ResetBits(GPIOF,GPIO_Pin_9)	
#define GPOO_SetBits(GPIOF,GPIO_Pin_10)	

void LED_Init(void);//初始化  先声明,然后在.C文件中实现	 				    
#endif

最后再编写main.c文件

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"

int main(void){ 
 
	delay_init(168);		  //初始化延时函数
	
	LED_Init();		        //初始化LED端口
	
  /**下面是通过直接操作库函数的方式实现IO控制**/	
	
	while(1){
		
	GPIO_ResetBits(GPIOF,GPIO_Pin_9);  //LED0对应引脚GPIOF.9拉低
		
	GPIO_SetBits(GPIOF,GPIO_Pin_10);   //LED1对应引脚GPIOF.10拉高
		
	delay_ms(500);  		   //延时300ms
		
	GPIO_SetBits(GPIOF,GPIO_Pin_9);	   //LED0对应引脚GPIOF.0拉高
		
	GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉低
		
	delay_ms(500);                     //延时300ms
		
	}
	
}

三、实际验证

1.烧写程序

在FlyMcu软件中利用串口将编译好的程序烧写进去
在这里插入图片描述

2.实际功能验证

在这里插入图片描述
烧写进板子的程序开始运行,实现了跑马灯功能

总结

这个跑马灯的实验主要是介绍了对于32IO口的使用,虽然内容上比较简单,也是通过调库的方式来实现的,但还是能给我们很多有用得启发。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
要安装STM32F103ZET6固件,首先需要下载并安装STM32CubeMX软件。STM32CubeMX是STMicroelectronics(意法半导体)官方提供的一款配置工具,可用于生成STM32微控制器的初始化代码。接下来的步骤如下: 1. 打开STM32CubeMX软件,点击左上角的“New project”按钮创建新项目。 2. 在弹出的窗口中选择目标芯片型号为“STM32F103ZE”,然后点击“Start Project”。 3. 在“Pinout & Configuration”页签中,根据需要配置芯片的引脚功能和时钟源等。 4. 在“Middleware”页签中,选择需要使用的中间件,如FreeRTOS、USB等。 5. 在“Project”页签中,选择项目的存放路径和IDE。如果你使用的是Keil MDK或者IAR Embedded Workbench等IDE,需要选择相应的IDE版本。 6. 点击左下角的“Generate”按钮生成代码。生成的代码将包含文件和初始化代码。 7. 生成成功后,关闭STM32CubeMX软件,打开IDE,创建一个新的工程。 8. 将STM32CubeMX生成的文件复制到新建工程的文件夹中,包括.c和.h文件。 9. 在工程中添加STM32的头文件路径和文件路径。 10. 在代码中引用需要使用的函数和文件。 11. 配置编译选项,编译并下载程序到STM32F103ZET6芯片中。 这样,你就成功安装了STM32F103ZET6固件。可以通过调用文件中的函数来实现各种功能,如GPIO控制、串口通信、定时器和PWM等。为了更好地理解和使用STM32F103ZET6固件,建议查阅ST官方提供的用户手册和参考手册。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行稳方能走远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值