STM32点亮第一盏灯

1.在原理图里面找到灯的位置

打开原理图,如下图可以观察到LED1对应的管脚是PA5
并且,阳极对应的就是PA5所以当PA5为高电平时点亮LED1
STM32点亮第一盏灯_寄存器

2.编程实现

#include "stm32f10x.h"
//延迟函数
void Delay(u32 count)
{
u32 i=0;
for(;i<count;i++);
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA口

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //配置端口PA5这个端口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //模式为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO速度是50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化

//GPIO_SetBits(GPIOA,GPIO_Pin_5); //设置PA5端口为高电平
GPIOA->BSRR = ((uint16_t)0x0020); //或者使用位操作设置PA5端口为高电平

while(1){
GPIOA->BRR = ((uint16_t)0x0020); //使用位操作设置PA5端口为低电平
//GPIO_ResetBits(GPIOA,GPIO_Pin_5); //或者使用函数的形式
Delay(3000000); //延迟
GPIOA->BSRR = ((uint16_t)0x0020);
//GPIO_SetBits(GPIOA,GPIO_Pin_5);
Delay(3000000);
}
}

ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。

管脚对于位写1 gpio 管脚为高电平,写 0 为低电平

BSRR 只写寄存器:[color=Red]既能控制管脚为高电平,也能控制管脚为低电平。
对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 ,无动作

BRR 只写寄存器:只能改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。

3.编译、连接、下载运行即可