一、开发环境
1、板子:STM32F469I
2、IDE:Keil 5
3、源码,pack for STM32F4
二、概述
GPIO 是学习单片机时最基础、最简单的一个功能。
对于GPIO无非有四种功能。
1、输出IO
2、输入IO
3、中断IO
4、复用
对于复用功能,在相应的外设部分会再有详细的说明,此帖只是针对前三种进行测试说明。
三、正文
1、pack 中的程序都是只读的,要把它们复制出来,留下一个备份,去掉只读属性。
2、打开工程文件,Projects\STM32469I-Discovery\Examples\GPIO\GPIO_EXTI\MDK-ARM\Project.uvprojx
3、LED与KEY的原理图,可以得到分配的GPIO号
可以看到,LED使用的GPIO分别是G6、D4、D5、K3
按键使用:A0
4、程序
添加延时函数:
void delay()
{
int i;
for(i=0;i<0xffffff;i++);
}
添加初始化 LED3
在main函数中闪烁LED3
delay();
HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN , GPIO_PIN_SET);
delay();
HAL_GPIO_WritePin(LED3_GPIO_PORT, LED3_PIN , GPIO_PIN_RESET);
在此之前,还要对硬件层进行初始化。
对时钟初始化。
对按键PA0,设置为中断功能。
static void EXTI0_IRQHandler_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOA clock */
__HAL_RCC_GPIOA_CLK_ENABLE();
/* Configure PA.00 pin as input floating */
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = GPIO_PIN_0;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Enable and set EXTI line 0 Interrupt to the lowest priority */
HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
5、结果
LED3(红色闪烁)
按键后,LED1(绿色亮),再按后,灭。
|