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、实验现象

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部