#include <stm32f4xx.h> #include "stm32f4xx_conf.h" #include "delay.h" GPIO_TypeDef* io_led=GPIOC;//定义一个指向结构体GPIO_TypeDef的io_led const u16 pin_led=GPIO_Pin_1;//引脚 GPIO_TypeDef* io_key=GPIOC; const u16 pin_key=GPIO_Pin_0; void Led_Init() { GPIO_InitTypeDef GPIO_init_l;//用于初始化的结构体 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //时钟 GPIO_init_l.GPIO_Pin=GPIO_Pin_1; GPIO_init_l.GPIO_Mode=GPIO_Mode_OUT; GPIO_init_l.GPIO_OType=GPIO_OType_PP; GPIO_init_l.GPIO_Speed=GPIO_Speed_100MHz; GPIO_init_l.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOC,&GPIO_init_l); } void Key_Init() { GPIO_InitTypeDef GPIO_init_k; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_init_k.GPIO_Pin=GPIO_Pin_0; GPIO_init_k.GPIO_Mode=GPIO_Mode_IN; GPIO_init_k.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOC,&GPIO_init_k); } void Delay(u32 time) { u32 t=time; while(t--); } int main(void) { u8 flag=0; Key_Init(); Led_Init(); while(1) { if((io_key->IDR&pin_key)==0){ Delay(0xfffff); if((io_key->IDR&pin_key)==0){ if(flag==0){ flag=1; io_led->BSRRL=pin_led;//对寄存器进行操作 BSRRL 低电平 Delay(5000000); } else{ flag=0; io_led->BSRRH=pin_led;//对寄存器进行操作 BSRRH 高电平 Delay(5000000); } } } } }
话说51写这个分分钟就搞定了,不过STM32这样是有道理的,大型的工程便于管理