基于HAL库的32流水灯

举报
沉浸嵌入 发表于 2022/07/15 15:25:23 2022/07/15
【摘要】 基于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	
 
		
//第二种,它会先全部亮起来,然后一个个灭,灭完后开始流水灯	
//		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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。