本文主要是介绍2022/9/19——基于stm32mp157中M4核的中断实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实验所用的中断接口为:
三个按键——key1、key2、key3,所对应的管脚为——PF9、PF7、PF8,检测方式为下降沿
光电开关,对应的管脚为PE15,检测方式为上升沿
火焰传感器,对应的管脚为PF5,检测方式为上升沿
人体红外,对应的管脚为PF12,检测方式为上升沿
采用STM32CubeMX软件进行管脚的配置和初始化之后生成工程并在keil软件中填充代码
代码的填充
1、gpio.c
将LED1与key3和人体红外相连接,每当key3按下或人体红外触发LED1的状态就会发生改变
将LED2与key2和火焰传感器相连接,每当key2按下或火焰传感器触发LED2的状态就会发生改变
将LED3与key1和光电开关相连接,每当key1按下或光电开关触发LED3的状态就会发生改变
/* USER CODE BEGIN 0 */
//下降沿
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){//KEY2--->PF10case GPIO_PIN_7:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);//打印提示信息printf("KEY2按下!!!!!\n");break;//KEY3--->PE10case GPIO_PIN_8:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);//打印提示信息printf("KEY3按下!!!!!\n");break;//KEY1--->PE8case GPIO_PIN_9:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);//打印提示信息printf("KEY1按下!!!!!\n");break;}
}
//上升沿
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){//PF5--->PF10case GPIO_PIN_5:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);//打印提示信息printf("火焰感应触发!!!!!\n");break;//PF12--->PE10case GPIO_PIN_12:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);//打印提示信息printf("人体红外触发!!!!!\n");break;//PE15--->PE8case GPIO_PIN_15:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);//打印提示信息printf("光电开关触发!!!!!\n");break;}
}/* USER CODE END 0 */
2、为了通过串口打印提示信息,需要在usart.c中重写fputc函数
/* USER CODE BEGIN 0 */
int fputc(int ch, FILE* stream)
{//判断发送寄存器是否为空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;
}
/* USER CODE END 0 */
3、实验现象
这篇关于2022/9/19——基于stm32mp157中M4核的中断实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!