一、STM32开发环境搭建
安装STM32CubeMX,配合Keil,完成实验。
参考链接:https://blog.csdn.net/qq_43279579/article/details/112213196
二、LED流水灯(HAL库)
要求:(1)用GPIO端口完成3只LED灯的周期闪烁。(2)再用GPIO端某一管脚接2个开关(用杜邦线模拟代替)。采用中断模式编程,当2分开关接高电平时,对应的两个LED灯停止工作(即停止周期性闪烁),接低电平时,恢复工作。
1、用GPIO端口完成3只LED灯的周期闪烁。
1、在main.c中的while(1)循环中写入以下代码:(位置约在第95行)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 灯1亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 灯1灭
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET); // 灯2亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); // 灯2灭
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // 灯3亮
HAL_Delay(1000); // 延时1s
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // 灯3灭
2、然后进行编译烧录:
3、烧录结果:
4、在烧录时可能会遇到Cannot Load Flash Device Discription的报错,本人解决办法如下,供大家参考:
点击魔法棒选择Debug模块,点击右上方的Settings:
选择Flash Download模块,点击下方的Add,选择添加缺失的Flash即可:
2、用GPIO端某一管脚接2个开关(用杜邦线模拟代替)。采用中断模式编程,当2分开关接高电平时,对应的两个LED灯停止工作(即停止周期性闪烁),接低电平时,恢复工作。
1、中断引脚与输出引脚配置
2、优先级选择
3、代码实现
在 HAL _ GPIO _ EXTI _ Callback ()函数中设置标志位
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_0)
{
index = 1;
}
if(GPIO_Pin == GPIO_PIN_1)
{
index = 0;
}
}
在main函数中实现主要功能
while (1)
{
if(index==0)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
HAL_Delay(100);
}
}
三、使用Keil的软件仿真逻辑分析仪功能观察LED管脚的时序波形
1、环境配置
2、仿真结果
四、总结
HAL库开发比起标准库开发更加便捷高效,利用HAL库开发可以再之后的项目中大大增加其便捷性。由于本人认知浅薄,上述内容或有诸多不详错漏之处,望各位海涵并指出批正。