程序:
//下降沿
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
//KEY1--->PE8
case GPIO_PIN_9:
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_8);
printf("KEY1 down\n");
break;
//KEY2--->PE7
case GPIO_PIN_7:
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_10);
printf("KEY2 down\n");
break;
//KEY1--->PE8
case GPIO_PIN_8:
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_10);
printf("KEY3 down\n");
break;
}
}
/* USER CODE END 2 */
//上升沿
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
//光电开关
case GPIO_PIN_15:
printf("guangdian\n");
break;
//火焰传感器
case GPIO_PIN_5:
printf("huoyan\n");
break;
//人体红外
case GPIO_PIN_12:
printf("renti\n");
break;
}
}
//重写printf函数
int fputc(int ch,FILE *stream)
{
//1.判断发送数据寄存器是否为空,为空,才可以发送下一个字节
//ISR[7]
//读0:发送数据寄存器满,需要等待
//读1:发送数据寄存器空,才可以发送下一个字节数据
while(!(huart4.Instance->ISR&(0x1<<7)));
huart4.Instance->TDR=ch;
//判断是否为‘\n’
if(ch=='\n')
{
while(!(huart4.Instance->ISR&(0x1<<7)));
huart4.Instance->TDR='\r';
return ch;
}
}
运行效果: