中断实验(按键/光电开关/火焰传感器/人体红外)

2023-10-18 14:20

本文主要是介绍中断实验(按键/光电开关/火焰传感器/人体红外),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

任务要求:1:把中断原因打印在串口工具上,比如按下key1,显示:key1_rq

                  2:按下key1、2、3时,LED1、2、3,状态反转(本来亮的熄灭,熄灭的点亮)

                  3:人体红外感应、火焰传感器、光电开关也和key1、2、3一样,与LED1、2、3一一对应

本实验采用的开发板为华清远见出品的STM32MP157开发板

本实验使用了STM32CubeMX软件进行工程搭建

首先设置端口复用,再把端口GPIO与EXTI连接

1. 配置LED1/LED2/LED3对应的按键为输出模式:PE10(key3)/PF10(key2)/PE8(key1),给M4核
2. 配置PF9/PF7/PF8/PE15/PF5/PF12为GPIO_EXTI模式,给M4核

为了输出文字,还要再把PB2设置为UART4_RX,PG11设置为UART4_TX

选择A->Z栏

        选择GPIO,将按键key1、2、3对应的PE8、PF10、PE10设置为下降沿检测方式

        选择EXTI,将所有EXTI设置中断使能

        选择UART4,勾选蓝色框“Cortex-M4(Stm32Cube)”,再将模式设置为异步(Asynchronous)

命名项目名,再把Toolchain / IDE设置为MDK-ARM、V5.27(keil 5)

再进行如下勾选后,导出文件

 首先进行按键、LED灯与各个传感器之间的关联编程

代码位于gpio.c文件的

#include "gpio.h"/* USER CODE BEGIN 0 */
/*******************
*    代码写在这    *  
*******************/
/* USER CODE END 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);  //LED灯状态翻转函数printf("key2_irq\n");break;//KEY3-->PE10case GPIO_PIN_8:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);printf("key3_irq\n");break;//KEY1-->PE8case GPIO_PIN_9:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);printf("key1_irq\n");break;}
}
//上升沿检测
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{switch(GPIO_Pin){//KEY2-->PF5case GPIO_PIN_5:HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);printf("fire_worning_irq\n");break;//KEY3-->PF12case GPIO_PIN_12:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_10);printf(" Human_infrared_irq\n");break;//KEY1-->PE15case GPIO_PIN_15:HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);printf("Photoelectric_irq\n");break;}
}

为了让提示打印在串口工具内,还需要在usart.c文件内编写如下代码,不然printf函数不会工作

#include "usart.h"/* 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 */

这篇关于中断实验(按键/光电开关/火焰传感器/人体红外)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/233123

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

FreeRTOS学习笔记(四)Freertos的中断管理及临界保护

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Cortex-M 中断管理1.1 中断优先级分组1.2 相关寄存器1.3 相关宏定义1.4 FreeRTOS 开关中断 二、临界段及其保护2.1 taskENTER_CRITICAL( ) 和 taskEXIT_CRITICAL( )2.2 taskENTER_CRITICAL_FROM_ISR( )

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

数据集 3DPW-开源户外三维人体建模-姿态估计-人体关键点-人体mesh建模 >> DataBall

3DPW 3DPW-开源户外三维人体建模数据集-姿态估计-人体关键点-人体mesh建模 开源户外三维人体数据集 @inproceedings{vonMarcard2018, title = {Recovering Accurate 3D Human Pose in The Wild Using IMUs and a Moving Camera}, author = {von Marc

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

数据集 Ubody人体smplx三维建模mesh-姿态估计 >> DataBall

Ubody开源人体三维源数据集-smplx-三维建模-姿态估计 UBody:一个连接全身网格恢复和真实生活场景的上半身数据集,旨在拟合全身网格恢复任务与现实场景之间的差距。 UBody包含来自多人的现实场景的1051k张高质量图像,这些图像拥有2D全身关键点、3D SMPLX模型。 UBody由国际数字经济学院(IDEA)提供。 (UBody was used for mesh r

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自