通过STM32F103寄存器点亮一盏LED
首先我们需要配置GPIO的寄存器才能去控制GPIO,学习单片机我建议用通过动手去
配置寄存器去学习比操作库更好地去明白学习单片机的原理。函数库的本质就是把
配置好的寄存器封装起来,我们学习操作寄存器才是真正掌握单片机。 GPIO寄存
器的一共有端口低位配置寄存器GPIOx->CRL,端口高位配置寄存器GPIOx->CRH
、端口输入数据寄存器GPIOx->IDR、端口输出数据寄存器GPIOx-ODR、端午设置
/清除寄存器GPIOx->BSRR、端口配置锁定寄存器GPIOx->BRR一共六个寄存器。
我们点亮LED灯只需要用到端口低位配置寄存器GPIOx->CRL,端口高位配置寄存
器GPIOx->CRH、端口输出数据寄存器GPIOx-ODR。 端口低位配置寄存器GPIOx->CRL,
用于设置低位(0-7位)IO的输出的具体引脚的模式。端口高位配置寄存器GPIOx->CRH,用于
设置低位(8-15位)IO的输出的具体引脚的模式。如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200610212054168.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjM0OTQxOQ==,size_16,color_FFFFFF,t_70)
例如:配置PE5,PB5分布为上拉输入和推挽输出模式
GPIOE->CRL=&0xFF0FFFFF//对相应位清零
GPIOB->CRL=&0xFF0FFFF//对相应位清零
GPIOE->CRL=|0xFF8FFFFF//对相应位清零
GPIOE->ODR=1<<5//高电平是上拉,低电平是下拉
GPIOB->CRL=|0xFF3FFFF//23:20位设置为0011
数据输出寄存器GPIOx->ODR名称全称是Output Data Register。
这些位可读可写并只能以字(16位)的形式操作。
操作该寄存器可以达到控制寄存器高低电平
。数据输入寄存器GPIOx->IDR名称全称是Intput Data Register。
该寄存器只能进行读操作,获取IO状态。
硬件设计
LED1一段和3.3V正极相连,负极和PE5相连,所以当PE5是低电平的时候就会导通。
下面开始写代码:建好工程和加入相关头文件后我们开始编程控制LED1按一秒的频率闪烁。
#include”led.h”
void LED_Init( void )
{
RCC->APB2ENR=1<<6;//使能PORTE时钟
RCC->APB2ENR=1<<3;//使能PORTB时钟
GPIOE->CRL=&0xFF0FFFFF;//清零
GPIOE->CRL=|0x0030000;//PE5推挽输出
GPIOE->ODR=1<<5//PE5高电平
}
Int main(void)
{
LED_Init();
While(1)
{GPIOE->ODR=0<<5;
//亮
Delay_ms(1000);
GPIOE->ODR=1<<5;
//灭Delay_ms(1000);
}
}
下载源码请加嵌入式+C#上位机学习资源QQ群:257536638