- 使用开发板 : STM32F103ZET6
- 编译环境: 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]
* 设置为 0001、0001 输出模式的 CNFy[1:0]-00-通用推挽输出模式,MODEy[1:0]-01-输出模式,最大速度10MHZ
* 3. 配置端口输出寄存器(GPIOx_ODR) 第5位为 0
*
#include "stm32f1xx.h"
*(unsigned int *)0x40021018 |= ((1) << 6);
*(unsigned int *)0x40011800 &= ~(0x0f << 20);
*(unsigned int *)0x40011800 |= ( 0x01 << (20));
*(unsigned int *)0x4001180C &= ~(1<<5);
while(1);
三、使用固件库编程
#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
#include "bsp_led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}
#include "stm32f10x.h"
#include "bsp_led.h"
void Delay(uint32_t count)
{
for(; count!=0; count--);
}
int main(void)
{
LED_GPIO_Config();
while(1)
{
LED_G(OFF);
Delay(0xffffff);
LED_G(NO);
Delay(0xffffff);
}
}
* led 循环亮灭
* 成功