1,用寄存器操作闪烁led灯
1,找到IO,确定模式:PE2 推挽.
根据原理图看出led1灯IO引脚为PE2
2,看芯片相关资料/数据手册--中文,发现控制PE2的为APB2
3,打开时钟.看文件:芯片相关资料/参考手册--中文
提供时钟:RCC APB2 外设时钟使能寄存器
控制接口PE的为第6位,开时钟,将第6位置为1
RCC->APB2ENR |=(0x1<<6); //开时钟,将第6位置为1
4,初始化IO口PE2,看手册:芯片相关资料/参考手册--中文.
端口PE2配置位(y = 2),对应看8-11位,根据模式配置为(0011)
端口0-7在低位CRL,端口8-15在高位CRH,
代码:
GPIOE->CRL &= ~(0x0f<<8);
GPIOE->CRL |= (0x03<<8);
5,操作端口输出数据寄存器:控制外部输出的高低电平
端口PE2输出数据(y = 2),
void Led_Open(void)
{GPIOE->ODR &=~(0x1<<2);//置0
}void Led_Off()
{GPIOE->ODR |=(0x1<<2);//置1
}
6,主函数调用
int main(void)
{Led_Init();Led_Open();Delay_nms(2000);Led_Off();while(1){}
}
综上所述:led.c中代码
#include "led.h"void Led_Init(void)
{//打开E的时钟RCC->APB2ENR |=(0x1<<6);//PE2GPIOE->CRL &= ~(0x0f<<8);GPIOE->CRL |= (0x03<<8);}void Led_Open(void)
{GPIOE->ODR &=~(0x1<<2);//置0
}void Led_Off()
{GPIOE->ODR |=(0x1<<2);//置1
}
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"int main(void)
{Led_Init();Led_Open();Delay_nms(2000);Led_Off();Key_Init();while(1){}}