实验目的:
在串口调试助手上打印出按键按下的时间
实验步骤:
实验程序:
/*******************************timer.c********************************/
#include "sys.h"
#include "stm32f4xx.h"
extern u8 TIM5CHA1_CAPTURE_STA;
extern u16 TIM5CHA1_CAPTURE_VAL;
/*
本示例的作用就是,
当按键按下时,每次输入捕获的时间差,
然后从串口调试助手中打印出其时间差;
*/
/*
关于输入捕获的操作可参考寄存器版的步骤
*/
/*
定时器输入捕获的初始化函数:
主要是关于寄存器的相关配置
*/
/*初始化定时器5为输入捕获*/
void TIM5_Init(void){
/*************************
定时器输入捕获的设置:
*************************/
/*将按键KEY_UP复用*/
/*1.使能GPIO端口时钟*/
RCC->AHB1ENR |= 1;
/*这里还需要将其配置成下拉,
因为在输入捕获中,将通过上升沿来触发;
*/
GPIOA->PUPDR |= 0X2;
/*2.使能复用外设时钟*/
RCC->APB1ENR |= 1<<3;
/*3.端口模式配置为复用功能*/
GPIOA->MODER |= 0X2;
/*4.配置GPIOx_AFRL或者GPIOx_AFRH寄存器,
将IO连接到所需的复用外设*/
GPIOA->AFR[0] |= 0X2;
/*设置定时器5的输入捕获*/
//设置TIM5的分频和自动重装
TIM5->PSC = 84-1;
TIM5->ARR = 0XFFFF-1; //芯片手册上写着是16位,
//设置滤波/映射/分频
TIM5->CCMR1 |= 0X1;
//设置上升沿触发并使能捕获
TIM5->CCER |= 0X1;
//使能更新中断和使能捕获中断
TIM5->DIER |= 0X3;
//使能计数器
T