第13讲 手把手编写跑马灯实验-库函数h

本文介绍了如何新建工程并编写LED的初始化代码。在工程中创建HARDWARE文件夹,包含LED相关的.c和.h文件。led.h中定义了LED_Init函数,防止重复引用。led.c中实现LED初始化,包括GPIO配置和端口赋值。main.c中调用LED_Init和延时函数实现LED的交替闪烁。
摘要由CSDN通过智能技术生成

一、新建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拷贝新建工程的例程文件,并且在其中建立一个HARDWARE文件,然后再在HARDWARE下建立和硬件有关的文件夹,比如LED
,硬件文件夹下存放和硬件有关的操作的 **.c**.h文件。

二、编写led.c和led.h

1.添加库文件路径
在这里插入图片描述
注意每个要被引用的 ***.h 文件所在的文件目录都要被添加进编译器。

2.led.h的讲解

led.h
#ifndef __LED_H //==防止重复引用==
#define __LED_H

void LED_Init(void);//头文件中的函数声明

#endif
这个结构的使用可以参考视频:https://www.bilibili.com/video/BV1YG411u78U/?spm_id_from=333.337.search-card.all.click&vd_source=65053b31ff73956b86f95395fb66e917

#ifndef __LED_H //==防止重复引用==
#define __LED_H

#endif

__LED_H是一种规范化的写法,也可以不这么写,比如我可以写成小写的 __led_h

3.led.c的讲解

led.c
#include "led.h"
#include "stm32f10x.h"

void LED_Init()
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);//使能GPIOD
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);//使能GPIOA
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;//设置输出端口
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置端口翻转速率
	GPIO_Init(GPIOD,&GPIO_InitStructure);//用以上参数对GPIOD进行初始化
	GPIO_SetBits(GPIOD , GPIO_Pin_2 );//给GPIOD 的 pin2 赋初值
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	GPIO_SetBits(GPIOA , GPIO_Pin_8);
}

led.c中是led的初始化函数LED_Init(),在这个函数中:
(1)首先创建了一个结构体,以方便后面的 GPIO_Init() 函数使用
(2)然后使用RCC_APB2PeriphClockCmd();对所要使用的端口的时钟做初始化
(3)再对结构体中的成员赋值,最后使用GPIO_Init()调用结构体对某个端口进行初始化GPIO_SetBits( )是对某个端口赋上初值
以上是关于led.c的讲解

4.main.c的讲解

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

int main(void)
 {	
	delay_init();	    	 //延时函数初始化	  
	LED_Init();		  	//初始化与LED连接的硬件接口
	while(1)
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_8); //LED0输出低
		GPIO_SetBits(GPIOD,GPIO_Pin_2);//LED1输出高
		delay_ms(300);
		GPIO_SetBits(GPIOA,GPIO_Pin_8);//LED0输出高
		GPIO_ResetBits(GPIOD,GPIO_Pin_2);//LED1输出低
		delay_ms(300);
	}
 }

(1)main中一般都会包含这三个头文件
(2)注意main中首先要进行初始化才能调用相关的函数
(3)其他的看代码上的注释都很容易理解

实验使用STM32F103C8T6微控制器及Keil MDK-ARM编译器。 首先,我们需要在Keil MDK-ARM中新建一个工程。步骤如下: 1. 打开Keil MDK-ARM软件,点击File -> New Project,弹出新建工程的对话框。 2. 选择STM32F103C8T6芯片,并选择工程的存储路径,点击Next。 3. 在Target选项卡中,选择芯片的时钟频率和调试接口,点击Next。 4. 在Project选项卡中,输入工程的名称和描述,点击Finish。 现在,我们已经创建了一个新的STM32工程,接下来需要编写代码。 1. 在项目文件夹中新建一个main.c文件,并添加以下代码: ```c #include "stm32f10x.h" #include "delay.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 使能GPIOA的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* 配置GPIOA的Pin5,Pin6,Pin7为推挽输出模式 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } int main(void) { SystemInit(); /* 配置GPIO */ GPIO_Configuration(); while(1) { /* 点亮Pin5 */ GPIO_SetBits(GPIOA, GPIO_Pin_5); Delay_ms(100); /* 点亮Pin6,同时关闭Pin5 */ GPIO_ResetBits(GPIOA, GPIO_Pin_5); GPIO_SetBits(GPIOA, GPIO_Pin_6); Delay_ms(100); /* 点亮Pin7,同时关闭Pin6 */ GPIO_ResetBits(GPIOA, GPIO_Pin_6); GPIO_SetBits(GPIOA, GPIO_Pin_7); Delay_ms(100); /* 关闭Pin7 */ GPIO_ResetBits(GPIOA, GPIO_Pin_7); Delay_ms(100); } } ``` 2. 配置GPIO 在GPIO_Configuration函数中,我们使用了STM32提供的库函数GPIO_Init来配置GPIOA的Pin5,Pin6和Pin7为推挽输出模式,时钟频率为50MHz。 3. 实现跑马灯效果 在main函数中,我们使用了STM32提供的库函数GPIO_SetBits和GPIO_ResetBits来控制GPIO的输出状态。实现跑马灯效果的原理是依次点亮Pin5,Pin6和Pin7,然后依次关闭Pin5,Pin6和Pin7,循环执行。 4. 编译和下载 在Keil MDK-ARM中编译代码,生成.hex文件。然后,将.hex文件下载到STM32F103C8T6芯片中,即可实现跑马灯效果。 完整代码如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值