led初始化函数
void LED_Init(void) { /*库函数配置 GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5 GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 端口配置, 推挽输出 GPIO_Init(GPIOE, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz GPIO_SetBits(GPIOE,GPIO_Pin_5); //PE.5 输出高 */ //寄存器配置 RCC->APB2ENR |= 1 << 3; //使能端口时钟 RCC->APB2ENR |= 1 << 6; GPIOB ->CRL &= 0XFF0FFFFF;//CRL为端口配置低配置寄存器,配置引脚输出/输入模式,速度 GPIOB ->CRL |= 0XFF3FFFFF; GPIOB ->ODR |= 1<<5;//ODR为端口数据输出寄存器,输出高电平 GPIOE ->CRL &= 0XFF0FFFFF;//CRL为端口配置低配置寄存器,配置引脚输出/输入模式,速度 GPIOE ->CRL |= 0XFF3FFFFF; GPIOE ->ODR |= 1<<5;//ODR为端口数据输出寄存器,输出高电平 }主函数
int main(void) { delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口 while(1) { /*位段法 LED0=0; LED1=0; delay_ms(300); //延时300ms LED0=1; LED1=1; delay_ms(300); //延时300ms*/ /*调用函数法 GPIO_SetBits(GPIOB,GPIO_Pin_5); GPIO_SetBits(GPIOE,GPIO_Pin_5); delay_ms(300); //延时300ms GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_ResetBits(GPIOE,GPIO_Pin_5); delay_ms(300); //延时300ms*/ /*寄存器法*/ //BRR为端口清除寄存器(16位),置1时将对应ODR(端口输出寄存器)位置0 //BSRR为端口清除/配置寄存器(32位),高16位为对应ODR位置0.低16位为对应ODR置1 /* GPIOB->BRR |= 1 << 5; //同理GPIOB->BRR=GPIO_Pin_5; GPIOE->BRR |= 1 << 5; //同理GPIOE->BRR=GPIO_Pin_5; delay_ms(300); //延时300ms/ GPIOB->BSRR |= 1 << 5; //同理GPIOB->BSRR=GPIO_Pin_5; GPIOE->BSRR |= 1 << 5; //同理GPIOE->BSRR=GPIO_Pin_5; delay_ms(300); //延时300ms*/ //寄存器写法同样等效 GPIOB->ODR &= 0 << 5; GPIOE->ODR &= 0 << 5; delay_ms(300); //延时300ms*/ GPIOB->ODR |= 1 << 5; GPIOE->ODR |= 1 << 5; delay_ms(300); //延时300ms*/ } }ODR的作用相当于BRR/BSRR,但是ODR与它们差在,ODR会受中断影响,而它们俩不会