一、HAL库点亮流水灯
1、用stm32CubeMX创建工程并进行相关配置
创建新的工程
配置SYS
GPIO的配置,该实验选择PA5、PB0、PC14来作为流水灯的输出端口,点击右侧芯片,找到所需要的端口,并将其设置为GPIO_Output,然后修改Pin脚的电平,将其设置为高电平
设置时钟,将按钮电亮
设置工程名,文件路径
创建打开工程
2、代码编写及编译
在Keil中点击main.c,然后将while(1)循环中添加以下代码
while (1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);//PA5红灯亮
HAL_Delay(1000);//延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);//灯灭
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);//PB0绿灯亮
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);//PC14黄灯亮
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
}
二、采用中断模式控制灯的亮灭
用GPIOA端的一个管脚连接一根杜邦线模拟开关,采用中断模式,当导线接高电平时LED亮,当导线接低电平时LED熄灭。
1、建立工程配置参数![](https://i-blog.csdnimg.cn/blog_migrate/d77926778c4ee62dd0bdab879a7fce78.png)
2、代码编写与编译
编写HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)插入main.c
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == A_EXIT_Pin){
//获取A8的电位
GPIO_PinState pinState = HAL_GPIO_ReadPin(GPIOA,A_EXIT_Pin);
//低电位
if(pinState==GPIO_PIN_RESET)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_RESET);
}
//高电位
else
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_14, GPIO_PIN_SET);
}
}
}