嵌入式课程 之 定时器实验
版权归如下公司,禁止非授权转载:
- 北京西普阳光教育科技股份有限公司(https://www.simpleware.com.cn)
- 维周机器人科技有限公司(http://www.vejoe.com)
文章目录
- 【实验目的】
- 【实验原理】
- 一、STM32的内部Sys Tick滴答定时器
- 二、STM32 通用定时器简介
- 【实验环境】
- 【实验步骤】
- 一、定义参数变量,声明函数
- 二、定时器TIM2、TIM3、TIM4、配置
- 三、任务函数注册、任务信息返回
- 四、中断函数调用任务
- 五、打开main.c
- 六、任务函数
- 【实验思考】
- 一、选择题
- 二、简答题
【实验目的】
1、通过子函数实现任务注册与调用,体会指针函数和结构体的实用性。
2、通过对Systick、TIM2、TIM3、TIM4定时器的配置,进入定时器中断执行任务。
【实验原理】
一、STM32的内部Sys Tick滴答定时器
在STM32芯片内部有一个简单的定时器——Sys tick timer。该定时器的时钟源可以是内部时钟,或外部时钟。所以在STM32中Sys Tick以HCLK(APB时钟)或HCLK/8作为运行时钟。
Sys Tick是一个24位的定时器,即一次最多可以计数2^24个时钟脉冲,这个脉冲计数值被保存到当前计数值寄存器SysTick->VAL中,只能向下计数,每接受到一个时钟脉冲
Sys Tick->VAL的值就向下减1,直至到0,当SysTick->VAL的值被减至到0时,由硬件自动把重载寄存器Sys Tick->LOAD中保存的数据加载到SysTick->VAL中,从新向下计数;当Sys Tick->VAL的值被减至到0时,触发异常,就可以在中断服务函数中处理定时事件。
当然,要使用Sys Tick进行以上工作必须对SysTick进行配置,它的控制配置很简单,只有三个控制位和1个标志位,都位于寄存器SysTick->CTRL寄存器中
- Bit0:ENABLE
为Sys Tick timer 的使能位,此位为1的时候使能Sys Tick timer ,此位为0的时候关闭Sys Tick timer. - Bit1:TICKINT
为异常触发使能位,此位为1的时候并且Sys Tick->VAL计数至0时会触发Sys Tick异常,此位为0的时候不触发异常。 - Bit2:CLKSOURCE
为Sys Tick的时钟选择位,此位为1的时候Sys Tick的时候为AHB 时钟,此位为0的时候Sys Tick时钟为AHB/8(AHB的八分频) - Bit16:COUNTFLAG
为计数为0标志位,若Sys Tick->VAL计数至0,此标志位会被置1.
定时时间计算公式:T=ticks*(1/f),T为要定时的总时间。
Ticks是存放到到重载SysTick->LOAD寄存器中,Sys Tick timer 定时器启动每次计数到Tick个脉冲产生异常触发(中断)。1/f即为Sys Tick timer 使用的时钟源,f为该时钟源的时钟频率,当时钟源确定后为常数
SysTick->CTRL &= ~(1 << 2);
使Sys tick CTRL寄存器 Bit2 位置0 ,其他位保持不变,Bit2位为0 ,Sys Tick时钟为AHB/8(AHB的八分频)
f = AHB/8=72MHz/8 =9MHz
1/f= 1/9000000 一个时钟周期为1/f s,所以我们得到一个时钟周期为1/9us
二、STM32 通用定时器简介
STM32F1 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。
STM3F1 的通用 TIMx (TIM2、 TIM3、 TIM4 和 TIM5)定时器功能包括:
- 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。
- 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~
65535 之间的任意数值。 - 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为:
A.输入捕获
B.输出比较
C. PWM 生成(边缘或中间对齐模式)
D.单脉冲模式输出 - 可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外
一个定时器)的同步电路。 - 如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
E.支持针对定位的增量(正交)编码器和霍尔传感器电路
F.触发输入作为外部时钟或者按周期的电流管理
由于 STM32 通用定时器比较复杂,这里我们不再多介绍,请大家直接参考《STM32 参考
手册》第 253 页,通用定时器一章。 为了深入了解 STM32 的通用寄存器, 下面我们先介绍一
下与我们这章的实验密切相关的几个通用定时器的寄存器。
首先是控制寄存器 1(TIMx_CR1),该寄存器的各位描述如图 13.1.1 所示:
结构体介绍
结构体TIM_OCInitTypeDef,包含了TIMx时间基数单位的配置信息
TIM_Pulse
TIM_Pulse 设置了待装入捕获比较寄存器的脉冲值。它的取值必须在 0x0000 和 0xFFFF 之间。
结构体NVIC_InitTypeDef
因版本原因可能在最新的库中通道名还减去尾部的Channel,写代码才能通过,本实验要去除尾部Channel
NVIC_IRQChannelPreemptionPriority
该参数设置了成员 NVIC_IRQChannel 中的先占优先级。
NVIC_IRQChannelSubPriority
该参数设置了成员 NVIC_IRQChannel 中的从优先级。
NVIC_IRQChannelCmd
该参数指定了在成员 NVIC_IRQChannel 中定义的 IRQ 通道被使能还是失能。这个参数取值为 ENABLE 或者 DISABLE。
结构体TIM_TimeBaseInitTypeDef
RCC_ClocksTypeDef结构体
程序中使用到的函数
函数NVIC_PriorityGroupConfig 选择优先分组
函数NVIC_Init 初始化中断优先级配置参数
函数RCC_GetClocksFreq 获取系统时钟频率
函数TIM_TimeBaseInit
【实验环境】
开发环境:Windows7/8/10,32bit/64bit
开发软件:Keil
开发硬件:双轮自平衡车、ST-link
【实验步骤】
一、定义参数变量,声明函数
二、定时器TIM2、TIM3、TIM4、配置
定义结构体变量,判断定时器是否是TIM2、TIM3、TIM4不是直接返回,是否是首次初始化,
结构体参数配置
三、任务函数注册、任务信息返回
四、中断函数调用任务
五、打开main.c
六、任务函数
【实验思考】
一、选择题
题目1 下面那个表示TIM2通道1预装值失能(B)
A:TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Disable);
B: TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);
C: TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);
D: TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable);
题目2 定时器有几种计数模式(A)
A: 3 B:4 C: 5 D:6
二、简答题
题目1 定义定时器的结构体有哪些成员?成员表示的功能?
答:TIM_TimeBaseInitTypeDef 中包含5个成员变量:
TIM_Period :该参数是用来设置自动重装寄存器的值,它的取值范围必须在0x0000和0xFFFF之间。
TIM_Prescaler :该参数是用来设置PSC预分频器的分频系数,它的取值范围必须在0x0000和0xFFFF之间。
TIM_ClockDivision :该参数是用来设置时钟分割
TIM_CounterMode :该参数是用来设置计数模式的。
TIM_RepetitionCounter :该参数使用设置重载几次数据后定时器才进入中断。
嵌入式课程 之 定时器实验相关推荐
- 嵌入式STM32--实验三 、通用定时器实验
嵌入式STM32--实验三 .通用定时器实验 一.实验目的 二.实验原理 1.STM32通用定时器概述 2.时基单元 3.工作模式 4.时钟选择 三.实验内容 3.1.结合按键中断和定时器编程实现以下 ...
- 流水灯嵌入式课程设计(包含UCOSII的无仿真和无UCOSII的有仿真)
目录 流水灯设计原理 1.基于STM32F103R6Tx的流水灯设计,先初始化管脚,编写LED.KEY按键和定时器的初始化函数. 2.按键的判断设计分为两部分:开始/停止按键和设置时间按键. ① 开始 ...
- 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
单片机课程设计彩灯实验 彩灯控制器设计 1.项目要求及参数 1.1用指令语句实现对C51的控制,从而实现对彩灯变化的控制. 1.2用定时器控制彩灯变化,用语句查询方式实现程序设计. 1.3用定时器控制 ...
- 嵌入式Linux结课报告,嵌入式课程报告.doc
嵌入式课程报告 嵌入式系统及应用设计报告 题 目 嵌入式Linux系统移植 专 业 电子与通信工程 姓 名 王文平 学 号 1320610012 一.硬件设备介绍 此次实验用的板子是友善之臂的Mini ...
- c语言电子时钟课程设计报告,电子时钟嵌入式课程设计报告
<电子时钟嵌入式课程设计报告>由会员分享,可在线阅读,更多相关<电子时钟嵌入式课程设计报告(19页珍藏版)>请在人人文库网上搜索. 1.合海大学计算机信息工程学院(常州)课程设 ...
- 用linux设计99乘法表,嵌入式课程设计九九乘法表
<嵌入式课程设计九九乘法表>由会员分享,可在线阅读,更多相关<嵌入式课程设计九九乘法表(8页珍藏版)>请在人人文库网上搜索. 1.安阳师范学院计算机与信息工程学院嵌入式系统课程 ...
- 聊城大学理工学院-嵌入式课程设计-stm32f407小车
最近两天有点偷懒了,什么都不想做,所以今天不接着弄上次的GPS模块了,今天就分享点别的-----大三时做的嵌入式课程设计.当时做好后也算是好几个班流传最广的版本了,所以多少还是很有点成就感的. 实现的 ...
- STM32F4系列HAL库配置定时器实验——输入捕获
STM32F4系列HAL库配置定时器实验--输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率.我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数 ...
- 51单片机:有趣的定时器实验
51单片机:有趣的定时器实验 本以为考完试搞完课设就没啥单片机啥事了,结果莫名的来了软件工程软件基础训练,训练Proteus和Keil软件.我嘞天,之前天天用好不?这课程安排的emmmmm,我还要其他 ...
最新文章
- 利用RMAN检测数据库坏块的脚本
- 用户空间与内核空间,进程上下文与中断上下文[总结]
- python下载安装教程3.8.0-Python3.8.0
- 总结——LR学习总结
- Mybatis SQL拦截器实现
- 容器源码解析之LinkedHashMap(九)
- 待字闺中:日志查询。(网络摘要)
- docker 部署_GitLab CI 自动部署netcore web api 到Docker
- HTTP协议中常见请求方法以及一些常见错误代码
- android上传图片文件至c 服务器,Android 史上最优雅的实现文件上传、下载及进度的监听...
- php整形数组求里面的质数,PHP实现的分解质因数操作示例
- 20135223何伟钦—信息安全系统设计基础第五周学习总结
- VS2008(C#)制作网页Tab标签切换方法(四)
- 【NOIP-2017PJ】图书管理员
- 计算机中英文打字文章,中英文混合打字文章
- pyodbc linux 乱码,关于python:无法在Linux上安装pyodbc
- 项目选题报告答辩总结
- linux的帮助,帮助信息_Linux公社 - Linux系统门户网站
- Android破解——支付宝内购破解方法总结
- 知识图谱从入门到应用——知识图谱的应用