STM32入门开发操作记录(九)——外部时钟定时器

news2024/12/24 11:36:52

目录

  • 一、项目准备
    • 1. 工程模板
    • 2. 器件接线
  • 二、外部时钟
    • 1. 端口复用
    • 2. 流程示意
  • 三、定时器模块
    • Timer.c
    • Timer.h
  • 四、遮光计数

一、项目准备

1. 工程模板

  本篇项目所用模板包含以下模块,声明函数见头文件,模块添加和函数功能详见往期记录。
请添加图片描述

2. 器件接线

  主装置:ST-Link仿真器,STM32系统板,MB102面包板,OLED显示屏(接线详见往期记录)

  除了A15B3B4JLINK的调试端口,其他端口可随意使用。器件接线如下:

器件端口/电源
3.3/VCC+
GND-
OLED-SCLB8
OLED-SDAB9
Sensor-DOA0

  增设模块:对射式红外传感器(A0端口)
  

二、外部时钟

1. 端口复用

  将多个功能赋予一个输入输出端口I/O),并且不同的功能可以通过设置工作模式来切换,称为端口复用。若一个GPIO同时被外置外设和内置内设使用,就称为复用
  

2. 流程示意

在这里插入图片描述
  因为选择对射式红外传感器输出时钟信号,所以需要配置GPIO端口;使用外部时钟ETR给定时器供能,选择外部时钟模式2,初始化时基单元NVIC,最后启动定时器即可。

  其中,具有TIM2定时器的外部时钟源模式的复用功能的GPIOA0,所以将传感器接入PA0引脚;由于是外部触发中断,手动产生的时钟信号频率较低,可以关闭预分频器(PSC = 0),也可以适当降低重装载目标值(ARR = 10-1),但需要启用滤波器消除抖动

  如此,每次触发外部中断,计数器的值(CNT)就会加1,累计十次触发更新中断
  

三、定时器模块

Timer.c

#include "stm32f10x.h"

void Timer_Init(void)
{
	// 开启外设时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);	// TIM2定时器
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	// GPIOA端口
	
	// 使用外部时钟模式二:(外部触发)关闭预分频器,极性为正向(上升沿有效),指定采样频率和采样点数
	TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x0F);
		
	// 配置端口参数
	GPIO_InitTypeDef GPIO_InitStructure;
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;			// 上拉输入模式:默认高电平
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		// 最大速度50MHz
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				// 13号引脚
	// 初始化PA0端口
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	// 配置时基单元参数
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;			// 滤波器采样频率:1分频
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;		// 计数器模式:向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 10 - 1;						// 自动重装载寄存器参数ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 0; 						// 预分频器寄存器参数PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;				// 重复计数器寄存器参数:仅供高级计数器使用
	// 初始化时基单元
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	// 重置标志位:初始化参数时会产生更新中断
	TIM_ClearFlag(TIM2, TIM_IT_Update);
	// 使能更新中断
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	
	// 配置中断优先级:分组2
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	// 配置NVIC参数
	NVIC_InitTypeDef NVIC_InitStructure;
 	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;				// 中断请求通道:TIM2
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				// 中断请求通道状态:使能
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;	// 抢占优先级:2
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;			// 响应优先级:1
	// 初始化嵌套中断向量控制器
 	NVIC_Init(&NVIC_InitStructure);
	
	// 启动定时器TIM2
	TIM_Cmd(TIM2, ENABLE);
}

  

Timer.h

#ifndef __TIMER_H
#define __TIMER_H

void Timer_Init(void);

#endif

  

四、遮光计数

#include "stm32f10x.h"		// 器件模块
#include "OLED.h"			// OLED模块
#include "Timer.h"			// 定时器模块

uint16_t Num;	// 数值

int main(void)
{	
	// 初始化
	OLED_Init();
	Timer_Init();
	
	// 显示计数
	OLED_ShowString(1, 1, "Num:");
	OLED_ShowString(2, 1, "CNT:");
	
	while(1)
	{
		OLED_ShowNum(1, 5, Num, 5);
		OLED_ShowNum(2, 5, TIM_GetCounter(TIM2), 5);
	}
}

// TIM2中断请求通道控制
void TIM2_IRQHandler(void)
{
	// 检查TIM2中断线请求状态寄存器的标志位
	if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)	// 更新中断触发
	{
		Num ++;										// 计数
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);	// 重置标志位
	}
}

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

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

相关文章

alibabacloud学习笔记13

微服务Docker镜像打包讲解 父项目怎么springboot版本依赖 每个子模块项目添加依赖 添加构建文件: 微服务Docker镜像打包整合JDK11 服务根目录创建dockerFile文件. dockerFile的内容。 构建镜像( 去到子模块pom文件下): 要下载这个才能使用本地docker.…

linux常用网络工具汇总三

linux常用网络工具汇总 6. 抓包工具6.1 wireshark安装界面介绍使用过滤器TCP协议示例关于wireshark的缺点 6.2 tcpdump命令格式关键字使用关于tcpdump的缺点 6.3 fiddler6.4 burpsuite 6. 抓包工具 6.1 wireshark Wireshark(前称Ethereal)是一个网络封…

谷歌账号异常后,恢复账号的时候验证手机号出现这样的界面就悬了

朋友们在使用谷歌账号玩游戏,或者浏览一些内容的时候,甚至啥也不干,过一阵仅仅来登录谷歌的时候可能会发现账号无法顺利登录。 往往是输入了谷歌账号(邮箱地址)后,经历过了纠结的人机验证后,输…

leetcode热题系列14

540. 有序数组中的单一元素 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2: 输入: [3,3,7,7,10,11,11] 输出: 10 思路: 利用逻…

适合毕业生!分享好用的9款AI论文写作软件

对于即将毕业的大学生来说,撰写论文是一项既重要又具挑战性的任务。为了帮助大家更高效地完成这一过程,我将推荐几款适合毕业生使用的AI论文写作软件,并详细介绍它们的功能和优势。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款功能全面且用…

【Python学习-UI界面】PyQt5 小部件4-QRadioButton

样式如下: QRadioButton 类对象是一个带有文本标签的可选择按钮。用户可以在表单上选择其中一个选项。该类派生自QAbstractButton类。 单选按钮默认是自动排斥的。因此,在父窗口中只能选择一个单选按钮。 如果选择了其中一个按钮,则之前选择…

微信小程序在不同移动设备上的差异导致原因

在写小程序的时候用了rpx自适应单位,但是还是出现了在不同机型上布局不统一的问题,在此记录一下在首页做一个输入框,在测试的时候,这个输入框在不同的机型上到处跑,后来排查了很久都不知道为什么会这样 解决办法是后 …

红日靶场vulnstack (二)

环境搭建 环境其实和vulnstack (一)差不多滴,只是变成有两台主机是具有两个IP的了。所有账号登录密码为1qazWSX,域管理员账号为administrator,密码和前面的一样。 Web:192.168.145.144(外),192.168.215.31(内) PC&am…

基因组学系列4:参考转录本数据库MANE

1. 参考转录本数据库MANE简介 为了促进临床参照的一致性,美国国家生物技术信息中心( NCBI)和欧洲分子生物学实验室-欧洲生物信息学研究所(EMBL-EBI)合作发布了参考转录本数据库MANE(Matched Annotation from the NCBI and EMBL-EBI)&#xf…

Python之格式化输出

格式化输出 方法一:用%方法二:用format()函数设置输出的内容的宽度和小数位数 方法一:用% 直接用print()函数对字符串进行输出,是没有进行格式化控制的。 格式化,是对输出内容的显示方式进行设置。 首先,要…

有名管道和信号

3.无名管道 只能用于 亲缘关系 进程间 A.c B.c | | A B 有名管道 fifo:先入先出 创建有名管道:makepipe 1.是一种特殊文件 a.存在于 内存中 b.在系统中,有一个对应的名称 c.看文件的大小 0bytes pathname…

仓颉编程语言入门 -- I/O 流概述

I/O 流概述 一 . 什么是I/O 在仓颉编程语言的设计理念中,与外部实体(如文件系统、网络、用户输入等)的数据交换活动被统称为I/O操作,其中“I”代表输入(Input),而“O”则代表输出(O…

算法打卡 Day22(二叉树)-最大二叉树 + 合并二叉树 + 二叉搜索树中的搜索 + 验证二叉搜索树

文章目录 Leetcode 654-最大二叉树题目描述解题思路 Leetcode 617-合并二叉树**题目描述**解题思路 Leetcode 700-二叉搜索树中的搜索**题目描述**解题思路 Leetcode 98-验证二叉搜索树**题目描述**解题思路 Leetcode 654-最大二叉树 题目描述 https://leetcode.cn/problems/…

Nginx--虚拟机配置

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 1、什么是虚拟主机 虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对…

C语言日常练习 Day16

目录 一、求一个3*3的整型矩阵对角线元素之和 二、有一个已经排序好了的数组,要求输入一个数后,按原来排序的规律将它插入数组中 三、输出“魔方阵”,所谓魔方阵是指它的每一行、每一列和对角线之和均相等 一、求一个3*3的整型矩阵对角线元…

3D数据可视化,B/S和C/S架构该如何选择?

针对3D数据可视化的展现形式,有B/S和C/两种架构可以选择,这两者区别是什么,分别有哪些优劣势,又有哪些对应的开发引擎或者软件,该如何选择呢,千汇数据工场通过本文给你讲明白。 一、什么是B/S和C/S模式 在…

DC-6靶机复现

靶机设置 设置靶机为NAT模式 靶机IP发现 nmap 192.168.112.0/24 靶机IP为192.168.112.141 目录扫描 访问浏览器 绑定hosts 再次访问成功 目录拼接 拼接/wp-login.php 发现后台登陆页面 使用webscan扫描 wpscan --url http://wordy -e u 发现了 admin,mark&am…

酷炫时尚未来科技视频开头PR模板MOGRT

这是一个高质量、组织良好、易于定制的pr模板。可以将此模板用于特殊活动、体育揭幕战、演示视频、快速和最小的企业促销。创建旅行介绍、干净的幻灯片、派对开场白和动态幻灯片。为YouTube、Vimeo或其他媒体托管网站创建视频。制作自己的杂志演示卷,展示你的作品集…

qt-13 进度条(模态和非模态)

进度条-模态和非模态 progressdlg.hprogressdlg.cppmain.cpp运行图模态非模态 progressdlg.h #ifndef PROGRESSDLG_H #define PROGRESSDLG_H#include <QDialog> #include <QLabel> #include <QLineEdit> #include <QProgressBar> #include <QCombo…

闲鱼卖1000元的带腾讯备案的 gaapqcloud.com.cn 域名低成本获取方法!

最近在闲鱼看到有人卖域名&#xff0c;声称是腾讯的备案&#xff0c;还卖1000多元&#xff01;逆天了&#xff01;这个信息差是真能割韭菜&#xff0c;我一查&#xff0c;这不就是腾讯云的全球应用加速域名吗&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;这样…