STM32之使用库函数及HAL库点燃流水灯

具体的代码如下:

    #include "led.h"                  // Device header
   	#include "SysTick.h"
   	
  	int main(
  	 
    SysTick_Init(72);
  
    Led_Init();
    
    while(1)
    {
      GPIO_Write(GPIOC,0x0001);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0002);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0004);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0008);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0010);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0020);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0040);
      delay_ms(500);
      GPIO_Write(GPIOC,0x0080);
      delay_ms(500);
    }
}

具体遇到的问题是delay函数的不一致,即江科大跟普中的延时函数写的不一样,普中需要现在main函数中加上SysTick_Init(72);一句。

另外,代码可优化如下:

#include "SysTick.h"

int main()
{   
    u8 i;
    u8 arr[8]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080};
    
    SysTick_Init(72);
    Led_Init();
    
    while(1)
    {
      for(i=0;i<8;i++)
      {
        GPIO_Write(GPIOC,arr[i]);
        delay_ms(500);
      }
    }
}   



HAL库代码如下

while (1)
  {
	  int i;
	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	  for(i=0;i<8;i++)
	  {
		  HAL_Delay(1000);
		  switch(i){
	  	  	  case 0:
	  	  		  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET); HAL_Delay(1000);
	  	  		  break;
	  	  	  case 1:
	  	  		  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET); HAL_Delay(1000);
	  	  		  break;
	  	  	  case 2:
	  	  	  	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET); HAL_Delay(1000);
	  	  	  	  break;
	  	  	  case 3:
	  		  	  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET); HAL_Delay(1000);
	  		  	  break;
	  	  	  case 4:
	  	  		  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,GPIO_PIN_SET); HAL_Delay(1000);
	  	  		  break;
	  	  	  case 5:
	  	  		  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,GPIO_PIN_SET); HAL_Delay(1000);
	  	  		  break;
	  	  	  case 6:
	  	  		  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); HAL_Delay(1000);
	  	  		  break;
	  	  	  case 7:
	  	  		  HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_RESET); HAL_Delay(1000);HAL_GPIO_WritePin(GPIOC,GPIO_PIN_7,GPIO_PIN_SET); HAL_Delay(1000);
	  	  		  break;
		  }
	  }

建立数组利用for循环即可,原理图如下:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值