第六周实验2---基于标准外设库的LED流水灯

一、在keil中配置外设库
1.创建新工程并选择相应的芯片,这里选择为STM32F103C8芯片。

2.在此步骤中不选择任何选项,直接点击OK跳过

3.在Manage Project Items设置中创建SYSTEM、CORE、FWLIB、USER四个文件夹。

4.在SYSTEM文件中将外设库的src文件夹中的所有文件加入。

5.将USER文件夹中导入main.c、stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h文件

6.在FWLIB文件中导入startup_stm32f10x_md.s文件

7.在CORE文件中导入core_cm3.c、system_stm32f10x.c文件,点击ok完成设置

8.点击“魔法棒”选项,在c/c++一栏设置标准库路径

9.在Define一栏中输入以下内容STM32F10X_MD,USE_STDPERIPH_DRIVER,并进行相应设置。

二、实验代码以及运行结果

1.创建bsp_led.h文件并编写相应内容

#ifndef _BSP_LED_H
#define _BSP_LED_H

#include "stm32f10x.h"		//要包含固件库的.h文件

#define LED_G_GPIO_PIN						GPIO_Pin_0			//定义绿灯管脚号
#define LED_B_GPIO_PIN						GPIO_Pin_1			//定义蓝灯管脚号
#define LED_R_GPIO_PIN						GPIO_Pin_5			//定义红灯管脚号
#define LED_G_GPIO_PORT						GPIOB				//定义用到的GPIO
#define LED_G_GPIO_CLK						RCC_APB2Periph_GPIOB//定义RCC时钟寄存器

void LED_GPIO_Config(void);		//.c文件中的函数声明

#endif	/*_BSP_LED_H*/

2.创建bsp_led.c文件并编写相应内容

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;		//定义变量,方便赋值
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE);	//打开APB2时钟,GPIO挂载在APB2
	//GPIO_PIN的部分用或将用到的管脚初始化为一个十六进制数据,原本是三个十六进制
	GPIO_InitStruct.GPIO_Pin = (LED_G_GPIO_PIN|LED_B_GPIO_PIN|LED_R_GPIO_PIN);	//设置需要用到的管脚,LED_G_GPIO_PIN看.h文件
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;			//设置输出模式为推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;			//设置输出速率为50MHz,LED_G_GPIO_CLK看.h文件
	
	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);			//加上&,方便取值	//初始化GPIO
}

3.在main.c文件中编写相应内容

#include "stm32f10x.h"  
#include "bsp_led.h"

void Delay(uint32_t count)
{
	for(;count != 0;count--);
}

int main(void)
{
	// 来到这里的时候,系统的时钟已经被配置成72M。
	LED_GPIO_Config();	//GPIO初始化
	
	while(1)
	{//LED流水灯,保险起见,点亮其中一个灯时,将其余两个灯都关闭
		GPIO_SetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN);		//关灯
		GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);		//关灯
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);		//开灯
		Delay(0xFFFFFF);
		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);		//关灯
		GPIO_SetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN);		//关灯
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);		//开灯
		Delay(0xFFFFFF);
		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);		//关灯
		GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);		//关灯
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN);		//开灯
		Delay(0xFFFFFF);
}

4.进行编译

5.实物运行成果

三、Keil的软件仿真观察管脚的时序波形
1.点击Debug栏中进行如下设置

2.使用Debug中如图所示选项进行运行

3.设置示波器选项

4.运行

5.运行结果

由运行结果显示其周期为3.495278s

运行如下:


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值