本文章属于学习笔记文章,如有抄袭请见谅
本人使用的开发板是野火骄阳stm32f407igtx开发板
本实验使用软件有:keil5、STM32CubeMX软件
学习本实验需要先学习stm32标准库,只需要学习前几章就行(GPIO口输出和输入、时钟配置,exti外部中断),本人是初学者,所以有错误欢迎大家指正。
软件安装参考野火教程,软件最好选择最新版本安装,我安装的官网上最新的keil5,好像是不需要破解,使用到目前没有什么阻碍。
学无止境,在学习时我有很多困惑会写出来,欢迎大家讨论
实验开始
-
承接上文(本次实验使用上个文章的代码就行实验,打开后缀.IOC文件)
-
设置GPIO(野火骄阳stm32f407igtx芯片有四个led灯引脚分别为PA15,PE2,PG15,PB8,按键引脚为PA0,PC13,PG2,PG3,PG4,PG5,我们选用PA0作为触发引脚,选择为输入,之后直接生成代码)
-
添加函数(初始化两个引脚后,我们进入gpio.c添加按键扫描代码)
uint8_t Key_Scan(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN)
{
if (HAL_GPIO_ReadPin(GPIOx,GPIO_PIN) == 1)
{
/* code */
while (HAL_GPIO_ReadPin(GPIOx,GPIO_PIN) == 1);
return 1;
}
else
{
return 0;
}
}
之后记得把初始化时led灯先关掉,在void MX_GPIO_Init(void)中添加代码HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);
4. 主函数编写(在mian.c中添加以下函数使用按键点亮led灯)
if (Key_Scan(KEY_GPIO_Port,KEY_Pin)==1)
{
HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);
总结与不足
该实验只能一次性点亮led灯,可以在gpio.c中添加led反转代码,进行按键控制led灯亮灭
uint8_t led_qufan(GPIO_TypeDef *GPIOx,uint16_t GPIO_PIN)
{
if(HAL_GPIO_ReadPin(GPIOx,GPIO_PIN)==1)
{
HAL_GPIO_WritePin(GPIOx,GPIO_PIN,GPIO_PIN_RESET);
}
else{
HAL_GPIO_WritePin(GPIOx,GPIO_PIN,GPIO_PIN_SET);
}
}
之后将main.c中的while(1)中的代码改为
if (Key_Scan(KEY_GPIO_Port,KEY_Pin)==1)
{
led_qufan(LED_GPIO_Port,LED_Pin);
}
实验效果是随按键灯亮灭。