在CubeMX中导出工程
通过startup_stm32mp15xx.s中
DCD EXTI7_IRQHandler ;
DCD EXTI8_IRQHandler ;
DCD EXTI9_IRQHandler
可以追到函数__weak void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
__weak修饰的函数重写后可定位到重写的位置
因为 PF7 PF8 PF9下降沿按键触发因此重写__weak void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
gpio.c
在begin,end之间
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin){
switch(GPIO_Pin){
case GPIO_PIN_7:
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10); //KEY2---LED2
printf("KEY2############down\n");
break;
case GPIO_PIN_8:
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_10); //KEY3---LED1
printf("KEY3############down\n");
break;
case GPIO_PIN_9:
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_8); //KEY1---LED3
printf("KEY1############down\n");
break;
}
}
main.c
在begin,end之间
int fputc(int ch,FILE* stream){ //因为printf中调用fputc函数,
//而fputc有默认的指向目标,因此重写fputc函数进行重定向
while(!(huart4.Instance->ISR&(0x1<<7)));
huart4.Instance->TDR=ch;
if(ch=='\n'){
while(!(huart4.Instance->ISR&(0x1<<7)));
huart4.Instance->TDR='\r';
}
}