STM32学习--1.流水灯

 

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会受中断影响,而它们俩不会

©️2020 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值