博客
关于我
实验三:STM32使用固件库点亮LED
阅读量:400 次
发布时间:2019-03-05

本文共 3418 字,大约阅读时间需要 11 分钟。

编程要点

1)使能GPIO端口时钟;

2)初始化GPIO目标引脚为推挽输出模式
3)控制GPIO引脚输出高低,电平。

bsp_led.h文件

#ifndef T_LED_H_#define T_LED_H_#include "stm32f10x.h"//R-红色#define LED1_GPIO_PORT			GPIOB#define LED1_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED1_GPIO_PIN			GPIO_Pin_5//G-绿色#define LED2_GPIO_PORT			GPIOB#define LED2_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED2_GPIO_PIN			GPIO_Pin_0//B-蓝色#define LED3_GPIO_PORT			GPIOB#define LED3_GPIO_CLK			RCC_APB2Periph_GPIOB#define LED3_GPIO_PIN			GPIO_Pin_1

以上代码分别把控制LED灯的GPIO端口,GPIO引脚号以及GPIO端口时钟封装起来了。在实际控制的时候我们就可以直接使用这些宏,以达到应用代码与硬件无关的效果。

/*直接操作寄存器的方法控制IO*/#define digitalHi(p,i)              {p->BSRR=i;}//输出高电平#define digitalLo(p,i)              {p->BRR=i;}//输出低电平#define digitalToggle(p,i)          {p->ODR^=i;}//输出反转状态/*定义控制IO的宏*/#define LED1_TOGGLE					digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯反转#define LED1_OFF					digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯灭#define LED1_ON						digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)//红灯亮#define LED2_TOGGLE					digitalToggle(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯反转#define LED2_OFF					digitalHi(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯灭#define LED2_ON						digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN)//绿灯亮#define LED3_TOGGLE					digitalToggle(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯反转#define LED3_OFF					digitalHi(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯灭#define LED3_ON						digitalLo(LED3_GPIO_PORT,LED3_GPIO_PIN)//蓝灯亮//红#define LED_RED		         		LED1_ON;LED2_OFF;LED3_OFF		//红#define LED_GREEN 	 				LED1_OFF;LED2_ON;LED3_OFF		//绿#define LED_BLUE    				LED1_OFF;LED2_OFF;LED3_ON      //蓝#define LED_YELLOW 					LED1_ON;LED2_ON;LED3_OFF       //黄#define LED_PURPLE  				LED1_ON;LED2_OFF;LED3_ON       //紫#define LED_CYAN        			LED1_OFF;LED2_ON;LED3_ON       //青#define LED_WHITE  	    			LED1_ON;LED2_ON;LED3_ON        //白#define LED_RGBOFF 	     			LED1_OFF;LED2_OFF;LED3_OFF     //黑void LED_GPIO_Config(void);#endif /*T_LED_H_*/

在这里插入图片描述

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

bsp_led.c文件:

#include "bsp_led.h"void LED_GPIO_Config(void){   				//定义一个GPIO_InitTypeDef类型的结构体变量		GPIO_InitTypeDef GPIO_InitStructure;		//开启LED相关的GPIO外设时钟		RCC_APB2PeriphClockCmd( LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);			//选择引脚模式为通用推挽输出		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   		//设置引脚速率为50MHz		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 		//选择要控制的GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);			//初始化GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);		//初始化GPIO引脚		GPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;		//初始化GPIO端口		GPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);		//关灯		GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);		//关灯		GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);	     	//关灯		GPIO_SetBits(LED3_GPIO_PORT, LED3_GPIO_PIN);}

Main.c文件

#include "stm32f10x.h"#include "bsp_led.h"#define SOFT_DELAY Delay(0x0FFFFF);void Delay(__IO u32 nCount); int main(void){   		/*LED端口初始化*/	LED_GPIO_Config();	 	while (1)	{   		LED1_ON;			 		SOFT_DELAY;		LED1_OFF;		   		LED2_ON;			 		SOFT_DELAY;		LED2_OFF;		 		LED3_ON;			 		SOFT_DELAY;		LED3_OFF;		  		/*轮流显示,红绿蓝黄紫青白*/		LED_RED;		SOFT_DELAY;				LED_GREEN;		SOFT_DELAY;				LED_BLUE;		SOFT_DELAY;				LED_YELLOW;		SOFT_DELAY;				LED_PURPLE;		SOFT_DELAY;						LED_CYAN;		SOFT_DELAY;				LED_WHITE;		SOFT_DELAY;				LED_RGBOFF;		SOFT_DELAY;			}}void Delay(__IO uint32_t nCount)	 //延时函数{   	for(; nCount != 0; nCount--);}

LED电路连接图

在这里插入图片描述

程序下载验证:

在这里插入图片描述

转载地址:http://zdpzz.baihongyu.com/

你可能感兴趣的文章
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 参数 innodb_flush_log_at_trx_commit
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
MySQL 命令和内置函数
查看>>
mysql 四种存储引擎
查看>>
MySQL 在并发场景下的问题及解决思路
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>