Nucleo-F446RE板子上面有一个蓝色的按键,是属于用户自定义编程按键,连接的GPIO引脚为PC13。对于这种只有一个按键的板子,使用外部中断触发是最好的选择,一来程序简单,二来不会占用CPU太多时间片(因为采用轮询方式监测按键输入的话,每循环一次CPU就要耗费时间去询问一次按键的输入状态并做判断,这样子虽然从效果看没什么影响,但是在一些实时性要求高的场合,缺点就体现出来了)。
根据电路图我们可以知道,按键的另外一端是接地的:
所以,我们配置外部中断的方式应该是上拉-下降沿触发,另外,在STM32中,PX10-PX15(X为A到G任意一组引脚)用的是同一条中断线EXTI_15_10,中断初始化代码如下:
void EXTI_IRQHandler_Config(int pre,int sub)
{
__HAL_RCC_GPIOC_CLK_ENABLE();
中断服务回调程序代码如下:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_13)
{
printf("进入用户按键(PC13)外部中断\n");
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
}
串口打印信息:
上传工程文件。
Nucleo-F446RE板子上面有一个蓝色的按键,是属于用户自定义编程按键,连接的GPIO引脚为PC13。对于这种只有一个按键的板子,使用外部中断触发是最好的选择,一来程序简单,二来不会占用CPU太多时间片(因为采用轮询方式监测按键输入的话,每循环一次CPU就要耗费时间去询问一次按键的输入状态并做判断,这样子虽然从效果看没什么影响,但是在一些实时性要求高的场合,缺点就体现出来了)。
根据电路图我们可以知道,按键的另外一端是接地的:
所以,我们配置外部中断的方式应该是上拉-下降沿触发,另外,在STM32中,PX10-PX15(X为A到G任意一组引脚)用的是同一条中断线EXTI_15_10,中断初始化代码如下:
void EXTI_IRQHandler_Config(int pre,int sub)
{
__HAL_RCC_GPIOC_CLK_ENABLE();
中断服务回调程序代码如下:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin==GPIO_PIN_13)
{
printf("进入用户按键(PC13)外部中断\n");
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
}
串口打印信息:
上传工程文件。