您现在的位置是:首页 >技术杂谈 >STM32-流水灯实验网站首页技术杂谈
STM32-流水灯实验
简介STM32-流水灯实验
流水灯实验需要用到多个引脚,所以我们要清楚哪些引脚可用,哪些引脚不可用,以下是STM32f103c8t6的引脚功能和复用功能,其中PB2,PA13,PA14,PA15,PB3,PB4有特殊功能
这里,我们使用PA0,PA1,PA2,PA3,PA4,来控制led灯的亮灭。
先将导线连接。如下图
注意,led灯的长脚为正极,短脚为负极。
如图:
分析:长脚由芯片引脚控制,短脚接电源负极,即当引脚输出高电平时,led亮,当引脚输出低电平时,灭。故使用推挽输出模式。
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void){
//先开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//定义结构体
GPIO_InitTypeDef GPIO_Init_Struct;
//赋值
GPIO_Init_Struct.GPIO_Mode = GPIO_Mode_Out_PP ;//使用推挽输入输出
GPIO_Init_Struct.GPIO_Pin = 0x1F;//将pa0,1,2,3,4全部开通
GPIO_Init_Struct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA ,&GPIO_Init_Struct);
//实现流水灯操作,led正极连接引脚,负极接地,使用推挽输出,即将数据寄存器写入1,引脚输出高电平,点亮led,反之熄灭。
uint16_t val = 0x0010;//这里初始化一个数
while(1){
for(int i = 0; i < 5; i++){
//循环点亮PA0-4
GPIO_Write(GPIOA, val);
val >>= 1;//将val右移一位
Delay_Ms(100);
}
val = 0x0010;//再将val初始化
}
}
这里有个难点,即val右移一位代表什么意思
0x0010展开即0000 0000 0001 0000,代表我要将PA4引脚的数据输出寄存器写1,即PA4引脚输出高电平,其他引脚输出低电平,那么就会点亮连接PA4引脚的LED灯,其他的LED灯熄灭。
右移一位即变为 0000 0000 0000 1000,代表我要将PA3引脚的数据输出寄存器写1,即PA4引脚输出高电平,其他引脚输出低电平,那么就会点亮连接PA3引脚的LED灯,其他的LED灯熄灭。
。。。
一直循环5次,依次点亮剩余灯。
由于在while循环内部,所以这样的操作一直会执行。造成流水灯的现像。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。