STM32实现流水灯的亮灭俩种方法

1首先我们都要初始化LED的配置
void LEDInit()
{
		
	GPIO_InitTypeDef GPIO_InitStructure; 
	SystemInit();
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); 
		
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; 
	GPIO_Init(GPIOC, &GPIO_InitStructure); 

}	

现在第一种方法gpio寄存器实现等的亮灭
2.GPIO寄存器

void LEDdisplay()
{ 
	u32 i,j;
	//BSRR是一个32位数据寄存器,这里要初始化实所有灯灭
	GPIOC->BSRR=0xff;
	for(i=0;i<600000;i++) ;

   while (1)
	{
		for(j=0;j<1000000;j++);
		//把ODR寄存器里面都存入零,让所有灯亮一次
		GPIOC->ODR=0x00;  
		  
		for(j=0;j<1000000;j++);
		//这里让所有灯灭掉
		GPIOC->ODR=0xFF;
		for(j=0;j<1000000;j++);
		//这里是把第五个串口的Pin_5放进寄存器,让这个灯发光
		GPIOC->ODR ^= GPIO_Pin_5;
	  }

}

在这个基础上可以进行修改
首先
这个是延迟0.6s大约

for(i=0;i<600000;i++) ;
while (1)
	{
	  for(i=0;i<8;i++)
	  {
		for(j=0;j<1000000;j++);
		//从0到7,没有设置BRR则BRR是默认亮灯,这是是循坏把灯调亮
		GPIOC->BRR=(1<<i);  
		  //从0到7,设置BSRR为灭灯,这是是循坏把灯i的灯熄灭
		for(j=0;j<1000000;j++);
		GPIOC->BSRR=(1<<i);
	  }
	  for(i=0;i<8;i++)
	  {
		  for(j=0;j<1000000;j++);
		  //统一让所有串口灯亮起来
		  GPIOC->BRR=0x000000ff;
		  //统一让所有串口灯亮起来
		  for(j=0;j<1000000;j++);
		  //设置BSRR寄存器
		  GPIOC->BSRR=0x000000ff;
		  
	  } 

第二种方法,函数法,

	u32 i;
	//把每个串口都设置成高电平,后面可以进行ResetBits直接可以把等亮起来
  GPIO_SetBits(GPIOC, GPIO_Pin_All);	
	GPIO_ResetBits(GPIOC, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_6); 
	for(i=0;i<600000;i++) ;
	while(1)
	{
		for(i=0;i<600000;i++) ;
		//写入GPIO接口,写入的灯会亮
	GPIO_Write(GPIOC, 0xfe); 
	for(i=0;i<600000;i++) ;
	GPIO_Write(GPIOC, 0xfd); 
	
	for(i=0;i<600000;i++) ;
	GPIO_Write(GPIOC, 0xfb); 

	for(i=0;i<600000;i++) ;
	GPIO_Write(GPIOC, 0xf7); 
			
	for(i=0;i<600000;i++) ;
	GPIO_Write(GPIOC, 0xef); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值