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组件,重新编译、调试。

可以打印出浮点数了。


智能推荐
刷题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" : 主表数据被删除, 会阻止删除 &...
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客户端发起一个数据操作...
