小白跟做江科大32单片机之对射式红外传感器计次

原理部分

1中断示意图,中断会打断主函数的执行,终端执行完成之后再返回主函数继续执行

2.STM32中断

这些灰色的是内核中断

这些白色的是普通中断

3.NVIC统一管理中断,每个中断通道都拥有16个可编程的优先等级,可对优先级进行分组,进一步设置抢占优先级和响应优先级

4.抢占优先级是表示可以直接插队让CPU执行,相当于急诊

   响应优先级就是看谁的优先级高,等待CPU执行完当前任务之后就立马执行优先级最高的,相当于平时较重的疾病

5.EXTI框图,最终有两个选择,第1个表示事件响应:触发别的外设操作。第2个表示中断:引脚电平触发中断

6.主要看此结构,打通一条GPIO到NVIC的中断通路就可以使用中断

7.旋转编码器电路图


实验过程

1.按照江科大老师给的电路链接图进行连接

2.在hardware中新建sensor.c和sensor.h文件夹

3.sensor.h代码如下

#ifndef _SENSOR__H
#define _SENSOR__H

void SENSOR_Init(void);
uint16_t turn(void);


#endif
 

4.sensor.c代码如下

#include "stm32f10x.h" 

uint16_t CountSensor_Count;

void SENSOR_Init(void)
{
    //使用各个外设前必须开启时钟,否则对外设的操作无效
    //中断只需开始B口和AFIO即可,EXTI和NVIC无需开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    //开启GPIOB的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);    //开启AFIO的时钟
    
    
    /*GPIO初始化*/
    GPIO_InitTypeDef GPIO_InitStructure;                    //定义结构体变量
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //GPIO模式,赋值为上拉输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;    //GPIO引脚,赋值为第1,2号引脚
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //GPIO速度,赋值为50MHz
    
    GPIO_Init(GPIOB, &GPIO_InitStructure);                    //将赋值后的构体变量传递给GPIO_Init函数
                                                            //函数内部会自动根据结构体的参数配置相应寄存器
                                                            //实现GPIOB的初始化
    /*AFIO选择中断引脚*/
    //将外部中断的14号线映射到GPIOB,即选择PB14为外部中断引脚
    //AFIO这个函数在GPIO那个里面
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);
    
    
    
    /*EXTI初始化*/
    //这个在library中找一下
    EXTI_InitTypeDef EXTI_InitStruct;
    EXTI_InitStruct.EXTI_Line=EXTI_Line14;              //选择哪个口
    EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;      //中断
    EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;   //这个需要搜索一下EXTI_Trigger,现在是上升沿触发
    EXTI_InitStruct.EXTI_LineCmd=ENABLE;                //中断打开
    EXTI_Init(&EXTI_InitStruct);
    
    //NVIC在初始化之前需要指定中断优先级分组
    /*NVIC中断分组*/
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    /*NVIC初始化*/
    NVIC_InitTypeDef NVIC_InitStruct;
    NVIC_InitStruct.NVIC_IRQChannel=EXTI15_10_IRQn;       //选择配置NVIC的EXTI15_10线,因为那个14号线过来的在10-15以内
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;  //这个是自己给的,值越低优先级越高
    NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
    NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; 
    NVIC_Init(&NVIC_InitStruct);
}

uint16_t turn(void)
{
    return CountSensor_Count;
}

//中断函数不需要声明,但一定是这个函数名
void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line14)==SET)      //判断是否是外部中断14号线触发的中断
    {
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
        {
            CountSensor_Count ++;                    //计数值自增一次
        }
        EXTI_ClearITPendingBit(EXTI_Line14);        //清除外部中断14号线的中断标志位
                                                    //中断标志位必须清除
                                                    //否则中断将连续不断地触发,导致主程序卡死
    }
}

最后中断函数的设置参考这个,红色的一般用于主函数中,蓝色的一般用于sensor中

5.main.c代码如下:

#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include "sensor.h"

int main()
{
  OLED_Init();
    SENSOR_Init();
    OLED_ShowString(1, 2, "RED_LED:");
    while (1)
    {
        OLED_ShowNum(2, 2, turn(), 5);
    }
}
6.实验结果

注意

ctrl+alt+空格可以出现代码提示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/20651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis缓存(笔记一:缓存介绍和数据库启动)

目录 1、NoSQL数据库简介 2、Redis介绍 3、Redis(win系统、linux系统中操作) 3.1 win版本Redis启动 3.2 linux版本Redis启动 1、NoSQL数据库简介 技术的分类:(发展史) 1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、…

Filter和ServletContext和Listener

目录 Filter案例 解决全站乱码问题 登录权限校验 ServletContext对象 Listener(监听器) Filter案例 解决全站乱码问题 我们每次访问每个servlet都要书写处理请求和响应乱码的代码,这样代码十分冗余,所以我们可以在过滤中 We…

Java——变量

一、变量介绍 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 1、变量声明和初始化 变量的声明: int a; i…

44-1 waf绕过 - WAF的分类

一、云 WAF 通常包含在 CDN 中的 WAF。在配置云 WAF 时,DNS 需要解析到 CDN 的 IP 上。请求 URL 时,数据包会先经过云 WAF 进行检测,如果通过检测,再将数据包流向主机。 二、硬件IPS/IDS防护、硬件WAF 硬件IPS/IDS防护&#xff…

VS Code 开发小技巧

VS Code的开发小技巧 添加代码片段 平时开发的时候,可以快速创建一个空白的模板。 一个快速生成代码片段的网站:https://snippet-generator.app/ 打开网站,把常用的模板代码复制进去,就会自动生成VS Code可以使用的代码片段了。…

从零到一建设数据中台 - 关键技术汇总

一、数据中台关键技术汇总 语言框架:Java、Maven、Spring Boot 数据分布式采集:Flume、Sqoop、kettle 数据分布式存储:Hadoop HDFS 离线批处理计算:MapReduce、Spark、Flink 实时流式计算:Storm/Spark Streaming、…

2024.05.30更新票星球抢购软件

文章目录 软件功能订阅须知早期代码软件功能 自持自定义搜索演唱会信息支持添加、删除观影人信息支持多账号并发抢票支持捡漏模式支持IP代理订阅须知 订阅后如果有问题,请联系博主,如果不懂可以免费提供讲解和远程服务早期代码 def enter_concert(self):print(u###打开浏览器…

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…

Science:论文写不出来?这三个方法让你一天完成一篇论文

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 众所周知,干了学术研究这一行,论文就是你研究质量和数量的衡量标准,可以说,你的一切“输入”-读文献、做实验、分析数据&#x…

k8s之PV、PVC

文章目录 k8s之PV、PVC一、存储卷1、存储卷定义2、存储卷的作用2.1 数据持久化2.2 数据共享2.3 解耦2.4 灵活性 3、存储卷的分类3.1 emptyDir存储卷3.1.1 定义3.1.2 特点3.1.3 用途3.1.4 示例 3.2 hostPath存储卷3.2.1 定义3.2.2 特点3.2.3 用途3.2.4 示例 3.3 NFS存储卷3.3.1 …

【C语言】柔性数组

前言 你是否听说过柔性数组呢?如果没有的话,就一起了解一下吧。 (没有malloc free calloc realloc 四个函数的前置知识的朋友最好先阅读一下我的“动态内存管理”一文,因为下面会涉及到。) 介绍 C99中,…

python找出100~999之间的水仙花数字

水仙花数字:个位,十位,百位的立方之和等于这个数本身 例如:153 1^35^33^3 for i in range(100, 1000):bw i // 100sw i % 100 // 10gw i % 10if bw ** 3 sw ** 3 gw ** 3 i:print(i)

LeetCode题练习与总结:路径总和Ⅱ--113

一、题目描述 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], target…

FreeRTOS同步互斥与通信

本章简介: 本章是概述性的内容。可以把多任务系统当做一个团队,里面的每一个任务就相当于团队里的一个人。团队成员之间要协调工作进度(同步)、争用会议室(互斥)、沟通(通信)。多任务系统中所涉及的概念,都可以在现实生活中找到例子。 各类RT…

Java大厂面试题第2季

一、本课程前提要求和说明 面试题1: 面试题2: 面试题3: 面试题4: 面试题5: 高频最多的常见笔试面试题目 ArrayList HashMap 底层是什么东东 JVM/GC 多线程与高并发 java集合类

【科研基础】证明积累

1-Bayesian Estimation (P317) Suppose that x = θ + ν w h e r e ν i s a n N ( 0 , σ ) random variable and θ is the value of a n N ( θ 0 , σ 0 ) random variable θ (Fig. 8-7). Find the bayesian estimate θ o f θ . \begin{align…

大学校园广播“录编播”与IP校园公共广播系统技术方案

一、项目概述 1、校园IP网络广播系统概述 大学校园广播系统是学校整个弱电系统中的子系统,它是每个学校不可缺少的基础设施之一,在传递校园文化、传播校园新闻资讯方面发挥着重要的作用。近几年来,虽然视频技术和网络技术在飞速发展&#xf…

操作系统的体系结构:宏内核和微内核

操作系统的体系结构是一个开放的问题。操作系统在核心态为应用程序提供公共的服务,那么操作系统在核心态应该提供什么服务、怎样提供服务?有关这个问题的回答形成了两种主要的体系结构:宏内核和微内核。 宏内核:大而全 宏内核系统…

word里面没有Acrobat选项

加载项被禁止,选择项里面,没有Acrobat选项 文件-》选项 加载项-》com加载项-》转到 添加Acrobat 出现Acrobat选项

[Qt]关于QListWidget、QScrollArea 为什么在QDesigner上设置了之后界面上仍然不生效的问题

前言 最近做了一些有关QListWidget和QScrollArea的控件,我去,这两个控件是真的坑,明明我在QDesigner的操作界面上对这两个控件的界面进行了修改,但是编译出来的软件就是看上去什么都没有,很坑,Gpt也没解决…