基于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
- 点赞
- 收藏
- 关注作者
评论(0)