STM32学习笔记——点亮一个LED灯

STM32学习笔记——点亮一个LED灯

1.硬件电路

在这里插入图片描述
由硬件电路图可知,LED0对应端口PB5

在这里插入图片描述
通过此图可知,当PB5口清零时,LED0就会亮起。

2.地址操作

int main()
{
	//打开GPIOB端口时钟
	*(unsigned int*)0x40021018 |= (1<<3);
	
	//配置PB5为输出模式 
	*(unsigned int*)0x40010C00 &= ~((0x0f)<<(5*4));
	*(unsigned int*)0x40010C00 |= ((1)<<(5*4));
	
	//使得PB5_ODR=0,PB5端口置为0
	*(unsigned int*)0x40010C0C &= ~(1<<5);
}

PB5端口清零分为三步:

  1. 打开端口时钟RCC(挂在AHB总线上)
  2. 配置对应端口为输出模式
  3. 将端口输出为0

3.寄存器操作

#include "stm32f10x.h"

#define RCC_PB2ENR				*(unsigned int*)(RCC_BASE + 0x18)
#define GPIOB_CRL				*(unsigned int*)GPIOB_BASE
#define GPIOB_ODR				*(unsigned int*)(GPIOB_BASE + 0x0C)
#define GPIOB_BSRR				*(unsigned int*)(GPIOB_BASE + 0x10)
#define GPIOB_BRR				*(unsigned int*)(GPIOB_BASE + 0x14)

#include "stm32f10x.h"
int main()
{
	//打开GPIOB端口时钟
	RCC_PB2ENR |= (1<<3);
	
	//配置PB5为输出模式 
	GPIOB_CRL &= ~((0x0f)<<(5*4));
	GPIOB_CRL |= ((1)<<(5*4));
	
	//使得PB5_ODR=0,PB5端口置为0
	GPIOB_ODR &= ~(1<<5);

	//PB5端口置为0也可以使用位清零寄存器
	//GPIOB_BRR |= (1<<5);
}

4.固件库编程

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"

int main(void)
{
	
	//开启GPIOB时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	//GPIOB初始化
	{
		GPIO_InitTypeDef GPIOB_Struct;
		GPIOB_Struct.GPIO_Pin = GPIO_Pin_5;
		GPIOB_Struct.GPIO_Mode = GPIO_Mode_Out_PP;
		GPIOB_Struct.GPIO_Speed = GPIO_Speed_10MHz;
		GPIO_Init(GPIOB, &GPIOB_Struct);
	}
	
	//点亮LED0
	GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}

猜你喜欢

转载自blog.csdn.net/weixin_46185572/article/details/107141072