博客
关于我
实验三: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中的关键字深入比较:UNION vs UNION ALL
查看>>
mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
查看>>
mysql中的字段如何选择合适的数据类型呢?
查看>>
MySQL中的字符集陷阱:为何避免使用UTF-8
查看>>
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>