STM32 - 1 - 使用固件库点亮LED

  1. 使用开发板 : STM32F103ZET6
  2. 编译环境: keil 5

一、 LED 原理图

  • 本次点亮 最小系统板上的 1个led,原理图如下:
  • 由原理图 可知,要点亮 LED1 和 LED2 分别要 使 LED0-PB5 , LED1-PE5 输出低电平,才可点亮 LED
    在这里插入图片描述

二 、需要操作到的寄存器

  • 1.由芯片手册的可知,控制PE5、输出低电平,需要配置相对应的寄存器
  • 由存储器映射表可知, GPIOE 寄存器的首地址
    在这里插入图片描述
    在这里插入图片描述
  • 2.使用寄存器输出低电平的方法步骤 偏移地址: 0x18
  • APB2 外设时钟使能寄存器(RCC_APB2ENR)
  • 端口配置低寄存器(GPIOx_CRL) (x=A…E) 偏移地址: 0x00
  • 端口输出数据寄存器(GPIOx_ODR) (x=A…E) 地址偏移: 0Ch
* 1. 配置 RCC寄存器是能 GPIOE端口  GPIO-[6]
* 2. 设置 端口配置低寄存器(GPIOx_CRL) 里的 GPIOE-[20:23] 
* 		设置为 00010001 输出模式的 CNFy[1:0]-00-通用推挽输出模式,MODEy[1:0]-01-输出模式,最大速度10MHZ
* 3. 配置端口输出寄存器(GPIOx_ODR)5位为 0
* 
  • 3.直接寄存器编程
#include "stm32f1xx.h"
	/* LED2 */
	/* GPIOE 引脚使能时钟 */
	*(unsigned int *)0x40021018 |= ((1) << 6);
	
	/* 将GPE5 配置 为输出引脚 */
	*(unsigned int *)0x40011800 &= ~(0x0f << 20);
	*(unsigned int *)0x40011800 |= ( 0x01 << (20));
	
	/* data 寄存器, 将 GPE5 输出为 低电平 */
	*(unsigned int *)0x4001180C &= ~(1<<5);
	
	
	while(1);

三、使用固件库编程

  • bsp_led.h 存储 led 相关的定义
#ifndef  _BSP_LED_H_
#define _BSP_LED_H_

#include "stm32f10x.h"


#define LED_G_GPIO_PIN     GPIO_Pin_5
#define LED_G_GPIO_PORT		 GPIOE 
#define LED_G_GPIO_CLK		 RCC_APB2Periph_GPIOE			


#define NO  1			/* 开 */
#define OFF 0			/* 关 */

#define LED_G(a)	{if(a) \
						GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN ); \
					 else \
						GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN );}


void LED_GPIO_Config(void);
											
											
#endif  /* _BSP_LED_H_ */

  • bsp_led.c 完成 对 led的相关操作
#include "bsp_led.h"


void LED_GPIO_Config(void)
{
	/* 定义要操作的GPIO结构体,然后对其初始化 */
	GPIO_InitTypeDef	GPIO_InitStruct;
	
	/* 初始化时钟 */
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
	
	/* 配置GPIOE */
	GPIO_InitStruct.GPIO_Pin 	= LED_G_GPIO_PIN; 	/* LED连接的引脚 */
	GPIO_InitStruct.GPIO_Mode	= GPIO_Mode_Out_PP; /* 设置为推挽输出模式 */
	GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz; /* 50M速度 */
	
	/* 初始化GPIO  */
//	GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 
	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct); 
}




  • main.c 主文件
#include "stm32f10x.h"       // Device header

/* bsp: board support package 板级支持包 */

#include "bsp_led.h"

/* 软件延时 */
void Delay(uint32_t count)
{
	for(; count!=0; count--);
}

int main(void)
{
	LED_GPIO_Config(); /* 初始化LED */

	while(1)
	{
		
		//GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN );
		LED_G(OFF); /* 关 */
		Delay(0xffffff);
		//GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN );
		LED_G(NO);  /* 开 */
		Delay(0xffffff);
	}

}

  • 结果
* led 循环亮灭 
* 成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值