STM32上实现点灯(固件库方式)
Posted 行稳方能走远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32上实现点灯(固件库方式)相关的知识,希望对你有一定的参考价值。
摘自: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.建立工程
在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) // DS0,调库的方式定义LED端口
#define GPOO_SetBits(GPIOF,GPIO_Pin_10) // DS1,调库的方式定义LED端口
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拉低,亮 等同LED0=0;
GPIO_SetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉高,灭 等同LED1=1;
delay_ms(500); //延时300ms
GPIO_SetBits(GPIOF,GPIO_Pin_9); //LED0对应引脚GPIOF.0拉高,灭 等同LED0=1;
GPIO_ResetBits(GPIOF,GPIO_Pin_10); //LED1对应引脚GPIOF.10拉低,亮 等同LED1=0;
delay_ms(500); //延时300ms
}
}
三、实际验证
1.烧写程序
在FlyMcu软件中利用串口将编译好的程序烧写进去
2.实际功能验证
烧写进板子的程序开始运行,实现了跑马灯功能
总结
这个跑马灯的实验主要是介绍了对于32IO口的使用,虽然内容上比较简单,也是通过调库的方式来实现的,但还是能给我们很多有用得启发。
以上是关于STM32上实现点灯(固件库方式)的主要内容,如果未能解决你的问题,请参考以下文章