【STM32入门】4.2对射红外传感器计次

1.接线方式

主要是编写传感器的驱动、配合OLED,每遮挡对射红外传感器,OLED屏幕的计数就加一。

2.驱动编写 

首先新建.c文件和.h文件,命名为CountSensor

国际惯例,.c文件内要包含stm32.h头文件,然后编写 CountSensor_Init()函数,即传感器计数函数。一步一步来,首先函数体内部要首先使能时钟,没有时钟不工作。总体的函数内部需要配置的东西有:

1.配置RCC时钟;

2.配置GPIO,端口配置为输入模式;

3.配置AFIO,选择GPIO链接到EXTI;

4.配置EXTI,选择边沿触发方式和触发的响应方式;

5.配置NVIC,配置中断优先级。

2.1时钟使能

void CountSensor_Init(void)
//第一步配置RCC,没有时钟不行;第二部配置GPIO,配置端口为输入模式;第三步配置AFIO,选择我们的GPIO链接到EXTI
	//第四步配置EXTI,选择边沿的触发方式,和触发的响应方式。第五步,配置NVIC,配置中断优先级。
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启GPIOB的时钟,因为传感器引脚接在了GPIOB
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//AFIO时钟开启

2.2定义GPIO参数 

GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//EXTI输入,推荐配置是浮空,上拉或下拉
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_14;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz ;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

首先定义GPIO参数结构体,GPIO_Mode选择上拉输入;使能第14号管脚,因为传感器的信号端接的是GPIOB_14;速度万年50MHz,最后调用GPIO_Init(GPIOB,&结构体名称)初始化GPIO14.

2.3配置AFIO,选择GPIO引脚

AFIO外设没有专门分配的库函数,它的库函数跟GPIO在同一个文件中,在GPIO.h中的第350行开始。使用函数:GPIO_EXTILineConfig()函数,选择指定的GPIO引脚链接EXTI,如果不知道这个函数怎么用,右键然后看它的定义,如下图所示:

函数上面的注释中@brief是函数功能简介,这里说的很清楚,本函数是选择GPIO管脚链接到EXTI 。函数的第一个参数是GPIO源,就是GPIO哪个片区,是GPIOA还是GPIOB;第二个参数是具体的管脚号。我们这个例子是用GPIOB_14,所以函数的调用形式为:

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);

2.4.配置EXTI

首先要用结构体定义EXTI参数,具体包括EXTI_Line,配置中断线;EXTI_LineCmd,开启或关闭中断;EXTI_Mode,选择中断模式;EXTI_Trigger,触发方式选择。总体就是这么几个地方要配置,最后调用EXTI_Init()函数,初始化EXTI。总体代码如下:

EXTI_InitTypeDef EXTI_InitStructure;
	EXTI_InitStructure.EXTI_Line=EXTI_Line14;//配置中断线
	EXTI_InitStructure.EXTI_LineCmd=ENABLE;//开启或关闭中断
	EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//定义中断模式
	EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;//触发中断方式,是下降沿还是上升沿
	EXTI_Init(&EXTI_InitStructure);

2.5.配置NVIC 

回顾上一篇讲的内容,NVIC的作用是管理中断,更具体地是管理中断的优先级。

首先要配置优先级分组,优先级分组有6种方式,这里选择第二种。

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先集分组定义

接下来使用结构体定义NVIC的参数,包括 NVIC_IRQChannel:指定NVIC通道;NVIC_IRQChannelCmd使能或关闭;NVIC_IRQChannelPreemptionPriority抢占优先级;NVIC_IRQChannelSubPriority响应优先级。最后调用NVIC_Init函数初始化NVIC。

NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;//指定NVIC的通道
	NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStructure);

 3.定义读数函数

函数的返回值是变量CountSensor_Count

uint16_t CountSensor_Get(void)
{
	return CountSensor_Count;

}

4.定义中断函数

EXTI_GerITStatus()函数的返回值是SET或者RESET,如果是SET代表管脚14触发,因此CountSensor+1

void EXTI15_10_IRQHandler(void)//中断函数的名字
{
	if (EXTI_GetITStatus(EXTI_Line14) == SET)
	{
		CountSensor_Count++;
		EXTI_ClearITPendingBit(EXTI_Line14);
	}
}

5.主函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "CountSensor.h"


int main(void)
{
	OLED_Init();
	CountSensor_Init();
	OLED_ShowString(1,1, "Count:");

	
	
	while(1)
	{
			OLED_ShowNum(1,7,CountSensor_Get(),5);
		
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3ds Max渲染贴图丢失?这样操作就能搞定!

当你在使用3ds Max进行渲染时,有时候会遇到贴图丢失的问题,导致模型无法正常显示。这可能是因为你在导入模型或添加贴图时出现了一些错误。不过不用担心,接下来我将向你解释这个问题可能出现的几种原因,同时提供有效的解决方案。 …

【力扣100】226.翻转二叉树

添加链接描述 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def invertTree(self, root: Optional[TreeN…

【机器学习】密度聚类:从底层手写实现DBSCAN

【机器学习】Building-DBSCAN-from-Scratch 概念代码数据导入实现DBSCAN使用样例及其可视化 补充资料 概念 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算…

CSharp中Blazor初体验

Blazor 是一个由微软开发的开源 Web 框架,用于构建富客户端 Web 应用程序使用 C# 语言和 .NET 平台。Blazor 允许开发人员使用 C# 语言来编写前端 Web 应用程序,而不需要像传统的 JavaScript 框架(如 Angular、React 或 Vue.js)那…

代码随想录算法训练营第二十一天 | 二叉树众数、公共祖先

目录 力扣题目 力扣题目记录 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 普通二叉树 搜索二叉树 236. 二叉树的最近公共祖先 总结 总结 力扣题目 用时:2h 1、530.二叉搜索树的最小绝对差 2、501.二叉搜索树中的众数 3、236. 二叉树的最近公共…

02 ModBus TCP

目录 一、ModBus TCP 一帧数据格式 二、0x01 读线圈状态 三、0x03读保持寄存器 四、0x05写单个线圈 五、0x06 写单个寄存器 六、0x0f写多个线圈 七、0x10:写多个保持寄存器 八、通信过程 九、不同modbus通信模式的应用场景 一、ModBus TCP 一帧数据格式 其…

队列(C语言版)

一.队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有 先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为 队尾 出队列:进行删除操作的一端称为…

【大数据面试】Flink面试题附答案

目录 ✅Flink介绍、特点、应用场景 ✅Flink与Spark Streaming的区别 ✅Flink有哪些部署模式 ✅Flink架构 ✅怎么设置并行度? ✅什么是算子链? ✅什么是任务槽(Task Slots)? ✅任务槽和并行度的关系 ✅Flink作…

自动化测试入门 —— 自动化测试概论

整篇论述总的来讲会很长,从自动化的思维、模型、工具,到各层次的自动化测试技术、测试框架、测试平台,包括面向未来的自动化技术都将涉及,因此打算拆成几个部分去写。此外,由于涉及的范围比较广泛,部分内容…

C++内存布局(二)

在《C内存布局(一)》 中,我们介绍了C内存布局的基本知识,本篇我们仍着重探讨C类的内存布局,尤其是 多重继承、钻石继承(菱形继承)场景下的虚函数表的情况。 一、多重继承 1.1 示例 class A { public:virtual void d…

LabVIEW软件模拟氢燃料电池在车辆中的应用

LabVIEW软件模拟氢燃料电池在车辆中的应用 在追求可持续能源的时代,氢燃料电池在绿色经济中扮演着关键角色。本研究通过LabVIEW软件模拟和评估了氢燃料电池在车辆应用中的性能和效率。LabVIEW作为一个强大的模拟工具,能够动态模拟氢燃料电池系统在不同条…

js键盘事件keydown事件,防止重复触发,组合键的配合使用

js键盘事件keydown事件,防止重复触发 键盘事件类型主要有三种: keydown 、keypress(不建议使用,部分浏览器已放弃)和 keyup 。 添加普通键盘keydown事件 // 监听键盘按下事件document.addEventListener(keydown, function(event) {// 输出按…

3 python基本语法 - Dict 字典

Python 中字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们…

23、Web攻防——Python考点CTF与CMS-SSTI模板注入PYC反编译

文章目录 一、PYC文件二、SSTI 一、PYC文件 pyc文件:python文件编译后生成的字节码文件(byte code),pyc文件经过python解释器最终会生成机器码运行。因此pyc文件是可以跨平台部署的,类似java的.class文件,…

Vue-图片懒加载

实现图片懒加载可以使用vue-lazyload插件 npm 链接:vue-lazyload - npm (npmjs.com) 使用方法: 1. 安装vue-lazyload npm i vue-lazyload npm i vue-lazyload1.3.3 // 如果是vue2就需要安装1.3.3版本 2. 引入vue-lazyload并使用 可以在使用该插…

软件企业在什么情况下需要找第三方软件测试机构?如何收费?

近年来,随着软件行业的迅猛发展,软件企业对软件测试的需求也越来越大。为了保证软件的质量和稳定性,许多企业选择寻找第三方软件测试机构来进行软件测试。第三方软件测试机构是独立于软件开发企业的专业机构,主要从事软件测试和质…

每日一题 2828. 判别首字母缩略词(简单)

简单题,就不多写了 class Solution:def isAcronym(self, words: List[str], s: str) -> bool:if len(words) ! len(s):return Falsefor i in range(len(words)):if words[i][0] ! s[i]:return Falsereturn True

栈(stack)

栈(stack)是一种用于存储数据的简单数据结构,与链表和顺序表很相似,最大的区别在于数据的存取操作。栈的插入和删除操作只允许在一端执行,因此把允许操作的一端称为栈顶,不允许操作的称为栈底。插入元素称为…

轻度听力损失的儿童需要早期干预吗?

一些宝宝在做听力筛查时总是不通过,进一步听力诊断发现宝宝有轻度的听力损失,刚知道这个消息时,家长可担心了,总想着宝宝是不是听不到啊?但是一段时间后,有些家长又会忽略宝宝的听力问题,因为部…