基于HAL库的32流水灯

一、硬件选用

1、STM32F103C6T6最小系统板(淘宝“优信电子”15.8一个)

 2、ST-LINK V2下载器一个(我购买的是淘宝Risym旗舰店的,36.50一个)

 下面这款是另一种模式ST-LINK下载调试器,当然价格相对比较昂贵(淘宝百来块一个)

 

 3、直插式LED灯3个、电阻3个、插针若干、万能板

因为我在自己的存货中只找到了蓝色发光二极管的,因此这里的实验就使用的是蓝色的LED,当然换成其他颜色的LED灯问题也不大。

发光二极管的直插式或贴片式的颜色不同,区别在于“正向导通电压V”,和“工作电流mA”的不同。

根据欧姆定律(I=U/R)可以求出限流电阻的阻值,因此我们这里使用1KΩ的电阻。

二、原理图设计

LED0-LED2 --------> PA0-PA2引脚

三、硬件的焊接及接线 

 四、CubeMX的设置

1、打开CubeMX先选择STM32F103C6T6A系列芯片  

2、SYS配置

先给调试器分配IO引脚,选择System Core下的sys ,将Debug设置为Serial Wire模式

(因为我们用的是ST-LINK下载器,是SWD模式的调试器)选择后芯片会自动打开两个接线引脚

如果你使用的是百来块的ST-LINK的下载器,那你对应的就要根据下载器的线数选择JTAG4/5模式

 3、配置RCC

选择RCC,将High Speed Clock 设置为 Crystal/Ceramic Resonator

 4、时钟配置

选择Clock Configuration,更改电路,最后为72MHz

5、GPIO设置

选择GPIO一次将PA0、PA1、PA2设置为GPIO_Output,并将输出电平改为High

 在这里我们最好给IO口设置一个标签,这个习惯在后面做项目,需用很多IO口时可以不容易混淆。

6、项目工程配置 

在Project Manager下的Project中设置工程名称和工程路径,并且选择编译软件,由于我们使用Kei5,选择MDK-ARM,以及在Code Generate中配置

最后点击右上角的GENERATE CODE选择open project 在Kei5中打开

五、软件代码

 然后我们进入gpio.c中,可以查看到我们在CubeMX中GPIO的配置情况

main.c

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

//第一种,也是我们最常用的,直接就开始流水灯
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);  // 灯1亮
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);  // 灯2灭
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);  // 灯3灭
		HAL_Delay(1000); // 延时1s
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);  // 灯1亮
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);  // 灯2灭
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);  // 灯3灭
		HAL_Delay(1000); // 延时1s
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);  // 灯1亮
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);  // 灯2灭
		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);  // 灯3灭
		HAL_Delay(1000); // 延时1s	

		
//第二种,它会先全部亮起来,然后一个个灭,灭完后开始流水灯
//因为我们在GPIO设置中将PA0、PA1、PA2的输出电平设置为High(高电平);可以参考原理图	
//		HAL_GPIO_WritePin(GPIOA, LED0_Pin, GPIO_PIN_SET);  // 灯1亮
//		HAL_Delay(1000); // 延时1s
//		HAL_GPIO_WritePin(GPIOA, LED0_Pin, GPIO_PIN_RESET);  // 灯1灭
//			
//		HAL_GPIO_WritePin(GPIOA, LED1_Pin, GPIO_PIN_SET);  // 灯2亮
//		HAL_Delay(1000); // 延时1s
//		HAL_GPIO_WritePin(GPIOA, LED1_Pin, GPIO_PIN_RESET);  // 灯2灭
//			
//		HAL_GPIO_WritePin(GPIOA, LED2_Pin, GPIO_PIN_SET);  // 灯3亮
//		HAL_Delay(1000); // 延时1s
//		HAL_GPIO_WritePin(GPIOA, LED2_Pin, GPIO_PIN_RESET);  // 灯3灭


  }
  /* USER CODE END 3 */
}

main.h中,由于前面我们在CubeMX中GPIO的配置时给他们加了个标签命名,所以就会出现以下情况

因此我们在main.c中就可以用GPIO_PIN_O,也可以用LED0_PIN

以上我们就实现简易的流水灯啦,如果想跟换流水灯的速度就在main.c文件中的延时进行修改就行了!

 六、实验现象

  • 24
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值