LPC55S69之输入捕获

标签: 单片机  LPC55S69

官方没有提供输入捕获的例子,这里介绍使用CTimer做为输入捕获。

一、引脚。

二、代码。

#include "fsl_debug_console.h"
#include "board.h"
#include "fsl_ctimer.h"
#include "pin_mux.h"
#include <stdbool.h>

#define CTIMER CTIMER2                 /* Timer 2 */
void ctimer2_callback(uint32_t flags);
static ctimer_callback_t ctimer_callback[] = {ctimer2_callback};
uint8_t gCtimer100msFlag = 0 , gOverFlow = 0;
uint32_t gDiffValue;
uint32_t gCaptureTime;

void ctimer2_callback(uint32_t flags) {
	static uint8_t flag = 0;
	static uint32_t first = 0 , second = 0;
	if(flag == 0) {
		CTIMER_StartTimer(CTIMER);
		first = CTIMER_GetTimerCountValue(CTIMER);
		flag = 1;
	} else {
		CTIMER_StopTimer(CTIMER);
		second = CTIMER_GetTimerCountValue(CTIMER);
		if(second >= first) {
			gDiffValue = second - first;
			gOverFlow = 0;
		} else {
			gDiffValue = first - second;
			gOverFlow = 1; // overflow
		}
		CTIMER_Reset(CTIMER);
		gCaptureTime = gDiffValue / (CLOCK_GetFroHfFreq() / 1000);
		flag = 0;
		gCtimer100msFlag = 1;
	}
}

int main(void) {
    ctimer_config_t config;

    CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
    CLOCK_AttachClk(kFRO_HF_to_CTIMER2); // 96MHz

    BOARD_InitPins();
    BOARD_BootClockPLL150M();
    BOARD_InitDebugConsole();

    CTIMER_GetDefaultConfig(&config);
    config.input = kCTIMER_Capture_0;
    CTIMER_Init(CTIMER, &config);
    CTIMER_RegisterCallBack(CTIMER, &ctimer_callback[0], kCTIMER_SingleCallback);
    CTIMER_SetupCapture(CTIMER, kCTIMER_Capture_0, kCTIMER_Capture_BothEdge, true);

    PRINTF("CTimer Caputre\r\n");

    while (1) {
    	if(gCtimer100msFlag == 1) {
    		PRINTF("Caputure Once = %u\r\n",gDiffValue);
    		PRINTF("Caputure Time = %u ms\r\n",gCaptureTime);
    		gCtimer100msFlag = 0;
    	}
    }
}

三、说明。

按下S3,也就是开发板上的USER键,可以捕获按下的时长。

设置示波器为单次触发方式,可以看到按键按下的时长。

我这里使用默认新建的工程,不能计算浮点数,所以这里用了uint32_t来计算,能达到ms级精度。

改为浮点数,可达到us级精度。

新建工程时勾选红框所示,也不能使用%f来打印浮点数。

将所有代码移入官方提供的例子(lpcxpresso55s69_lpadc_temperature_measurement)中。

在SDK管理器中增加CTimer组件,重新编译、调试。

可以打印出浮点数了。

 

版权声明:本文为k331922164原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/k331922164/article/details/103816053

智能推荐

刷题55—车的可用捕获量

92.车的可用捕获量 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/available-captures-for-rook 题目描述 在一个 8 x 8 的棋盘上,有一个白色车(rook)。也可能有空方块,白色的象(bishop)和黑色的卒(pawn)。它们分别以字符 “R”,“.”...

STM8S103之tim2捕获周期

本篇博文最后修改时间:2017年08月12日 12:00。 一、简介 本文以STM8S103F3P6编程为例,介绍STM8S103F3P6定时器2捕获周期 二、实验平台 电脑平台:Windows7 64位旗舰 编译软件:IAR 硬件平台:STM8S103F3P6 三、版权声明 博主:_懵懂 声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。 原文地址:http://blog.csdn....

STM8S103之tim1捕获周期及占空比

本篇博文最后修改时间:2017年08月13日 22:00。 一、简介 本文以STM8S103F3P6编程为例,介绍STM8S103F3P6定时器1捕获周期及占空比 二、实验平台 电脑平台:Windows7 64位旗舰 编译软件:IAR 硬件平台:STM8S103F3P6 三、版权声明 博主:_懵懂 声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。 原文地址:http://blog.c...

CSS3边框和圆角 学习打卡

课程介绍 1、CSS3圆角 2、CSS3盒阴影 3、CSS3边界图片 CSS3圆角 1、border-radius:一个最多可以指定四个border-*-radius属性的复合属性,为元素添加圆角边框 2、语法:border-radius:1-4 length|%/1-4 length|% 3、兼容:IE9+ firefox4+ chrome safari5+ opera CSS3指定每一个圆角 ...

(Java)反射的应用 - 取得类的结构

文章目录 一、基本概念 二、取得所实现的全部接口 三、取得父类 四、取得全部构造方法 五、取得全部方法 六、取得全部属性 一、基本概念 在反射机制中,还可以通过反射得到一个类的完整结构,这就需要使用 java.lang.reflect 包中的以下几个类: 这三个类都是 AccessibleObject 类的子类: 二、取得所实现的全部接口 要取得一个类所实现的全部接口,必须使用 Class 类中的...

猜你喜欢

ORM-外键关联基本使用

外键 在Mysql中,外键可以让表之间关系变得更加紧密, 在SQlAlchemy中, 通过ForeignKey类来实现,并且可以指定表的外键约束 FroeignKey的导入 在从表中条件一个模型类.字段(属性)即可 外键关联的代码和示例图 图说明 外键约束的删除 如果删除了主表中的数据, 从表的数据会怎么样? 需要设置 "RESTRICT" : 主表数据被删除, 会阻止删除 &...

放大镜效果

首先先写html样式 接下来是css部分 js部分 效果图...

Linux操作心得(1)

Ubuntu 16.04 (1)今天遇到一个蜜汁尴尬的情况,一本书上的示例,要求我建一个文件夹及子文件夹,然而明明创建的文件却没有显示 按书上此时应该出现一个文件夹,但并没有: 但可以进入,作为小白看不懂,后来发现是因为/XX指的是将文件建立在根目录了,因此不管怎样,就算用ls,或ll命令都查不到的,此时正确方法应该是去掉/backup前的/,如图就解决了文件夹的创建过程,还有一种傻瓜式方法就是直...

如何写出优美的 JavaScript 代码?

作者:尹锋 链接:https://www.zhihu.com/question/20635785/answer/223515216 1,避免使用 js 糟粕和鸡肋 这些年来,随着 HTML5 和 Node.js 的发展,JavaScript 在各个领域遍地开花,已经从“世界上最被误解的语言”变成了“世界上最流行的语言”。但是由于历史原因,JavaSc...

07-zookeeper的watcher机制原理

zookeeper的watcher机制原理 Watcher 的基本流程 zookeeper的watcher机制,总的来说可以分为三个过程: 客户端注册Watcher。 服务器处理Watcher。 客户端回调Watcher。 客户端注册 watcher有3种方式,getData、exists、getChildren。以如下代码为例,来分析整个触发机制的原理 基于zkclient客户端发起一个数据操作...