(3) 然后我们开始写程序:
a) 首先初始化系统时钟:
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
__PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibra
tionValue= 6;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
}
b) 然后配置GPIO
void MY_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/*GPIO 时钟使能 */
__GPIOC_CLK_ENABLE();
__GPIOA_CLK_ENABLE();
/*配置GPIO 输入引脚 : PC13*/
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/*配置GPIO 输出引脚 : PA5 */
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* 中断初始化*/
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
中断处理函数:
void EXTI15_10_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
Flag=~Flag;
}
c) 主函数:
int main(void)
{
SystemClock_Config();
MY_GPIO_Init();
while (1)
{
if(Flag==0)
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_SET);
}
}
(4) 程序编译运行之后没有错误将其下载到
开发板上,可以看到板子上的LED2随着按键状态发生改变,按一次亮一次,按一次灭一次。
(5) 总结:按键点亮LED灯程序很简单,主要就是配置一下系统时钟和GPIO,一个系统要跑起来,首先必须完成就是时钟初始化,然后就是配置输入输出引脚的IO口。虽然很简单但是是基础中的基础。