技术标签: c# stm32 编辑器 etl工程师 数据结构
#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
int num,num1;//记录第一次捕获中断和第二次捕捉中断寄存器值
int sum,n=0;//sum:记录所测信号一个周期计数器记了多少个数。n:做第一次和第二次的捕捉中断判断。
int main(void)
{
GPIO_InitTypeDef GPIO_Structure; //GPIO初始化
TIM_TimeBaseInitTypeDef TIM_TimeStructure;//时钟初始化
TIM_ICInitTypeDef TIM_ICTypeDef;//时钟输入捕捉通道初始化
NVIC_InitTypeDef NVIC_InitStruct;//中断初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能TIM2
uart_init(9600);//初始化串口,波特率9600
delay_init();
My_PWMTIM3_Init(1999,71);//自己写的一个输出pwm波的一个库,引脚PA6输出周期为2000us的脉冲
TIM_SetCompare1(TIM3,1500);//设置比较值
GPIO_Structure.GPIO_Pin = GPIO_Pin_1;
GPIO_Structure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入,输入捕捉模式需要将具体引脚调为浮空输入
GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_Structure);
TIM_TimeStructure.TIM_ClockDivision=TIM_CKD_DIV1;//分频因子
TIM_TimeStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIM_TimeStructure.TIM_Period=0xFFFF;//自动重装载值
TIM_TimeStructure.TIM_Prescaler=71;//预分频系数
TIM_TimeBaseInit(TIM2, &TIM_TimeStructure);
TIM_ICTypeDef.TIM_Channel=TIM_Channel_2;//PA1/T2.2
TIM_ICTypeDef.TIM_ICPolarity=TIM_ICPolarity_Rising;//上升沿捕捉
TIM_ICTypeDef.TIM_ICSelection=TIM_ICSelection_DirectTI;//映射一波
TIM_ICTypeDef.TIM_ICPrescaler=TIM_ICPSC_DIV1;//不分频
TIM_ICTypeDef.TIM_ICFilter=0x00;//不滤波
TIM_ICInit(TIM2,&TIM_ICTypeDef);
TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);//开启CC2中断
NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; //响应优先级
NVIC_Init(&NVIC_InitStruct);
TIM_Cmd(TIM2,ENABLE);
while(1)
{ printf("%d ",sum);//让串口每隔0.5秒打印测得周期值
delay_ms(500);}
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2,TIM_IT_CC2) != RESET&&n==0)//第一个上升沿
{ num=TIM2->CCR2;//记录第一次捕捉比较寄存器值
n++;
}
if(TIM_GetITStatus(TIM2,TIM_IT_CC2) != RESET&&n==1)//第二个上升沿
{ num1=TIM2->CCR2;//记录第二次捕捉比较寄存器值
n=0;//n清零
if(num-num1>50000)
sum=65535-num+num1;
else
sum=num1-num;}//最后一点判断的关键我会在文章中讲解
}
//
//
//name:Vincent njw QQ:1504012979 glut
一,硬件19
stm32f103c8t6,ch340模块
二,软件
具体操作我在代码段有详细的注释,我觉得比较重要的一点是对于单片机时钟的配置思想,也很简单,第一步更改对应引脚模式,第二设定计时器计数模式,第三设定计时器工作模式,第四如果需要中断可以设定中断,并写好对应的中断服务函数。切记!勿忘了在设定定时器模式之后要开启时钟。
接下来给大家讲为什么在中断函数最后加一个判断的原因,我设定的计数器模式为向上计数模式,最大值是65535。我们可以想象这样一种情况,当计数器记到65534时,此时进行了第一个上升沿的捕捉,往后在过1us,定时器的值会自动清零,假设我们所测的信号周期为20us,那么第二次的上升沿捕捉就是在计数器记到19的位置,此时第二次记录的值减去第一次记录的值显然不等于20us,此时就需要一个判断,把第一次的值减去第二次的值,假如大于50000,那么对于周期较小的信号来说,必然是发生了溢出,此时我们用65535减去第一次的捕捉值加上第二次捕捉值即为信号周期。
Source你可能已经有过这个问题了:"我 EOS上的 RAM 都消耗在哪了?"之前都没有一个能够提供账户当前 RAM 的被用在什么上的工具,直到有了 RAM 用量跟踪器,一个由 dfuse 构建和支持的应用程序,可在 dfuse Labs 中使用。之前的工具区块链包含大量信息。也由于信息过载,很难找出我们想找到的具体细节,就 RAM 使用情况而言也是如此。但随着 dfuse Search..._eos交易消耗多少ram
一、css实现左侧宽度固定右侧宽度自适应1、定位自适应*{padding: 0;margin: 0;}.left{background: red;width: 200px;height: 200px;position: absolute;/*定位*/left: 0;top:0;}.right{background: blue;height: 200px;margin-left: 210px;}定宽..._弹性盒内元素高度
“”“第五章 TensorFlow进阶(三) 加载经典数据集 minist”""import tensorflow as tffrom tensorflow import kerasfrom keras import datasets(x, y), (x_test, y_test) = datasets.mnist.load_data()print(x.shape)train_db = tf.data.Dataset.from_tensor_slices((x, y))print(train_
IDEA中运行没有错误的类,其他类报错解决方案:定位到错误位置,右击选择Exclude from Compile再次运行,没有报错_idea运行一个程序另一个报错
一clickhouse简介1.1什么是clickhouseClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Management System),简称CH ,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。ClickHouse是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运..._clickhouse的dt分区是什么格式
在数据库中,确定数据库的字段为vcdID,vcdName,vcdTotal(vcd藏量),vcdLendOut(借出的vcd数量),InputDate(置入日期)使用mybatis的逆向工程文件生成vcd的实体和mapper当然数据库查询的语句和方法也有其他的,这篇文章的主要侧重在layui的学习和应用。主要的页面主要分为两个,一个是用作展示数据表格的首页,另外一个是用来添..._layui表单数据封装成json格式怎么封装?
服务器环境:Windows 2008 64bitSQL Anywhere 16服务器SQLA数据库服务器自带的例子数据库位置:C:\Users\Public\Documents\SQL Anywhere 16\Samples\demo.db"用Sybase Central创建服务:服务名称:DemoDBService参数:-n DemoDB -x tcpip "C:\Users\Public\Do
转载 原文:https://blog.csdn.net/zhangrui_web/article/details/79651812dva.js 知识导图不知大家学 react 或 dva 时会不会有这样的疑惑:es6 特性那么多,我需要全部学会吗?react component 有 3 种写法,我需要全部学会吗?reducer 的增删改应该怎么写?怎么做全局...
DELIMITER $$CREATE FUNCTION myselect3() RETURNS INTBEGIN DECLARE c INT; SELECT id FROM class WHERE cname="python" INTO c; RETURN c;END$$ //这儿要是新设的$$,如果delimiter不改,sqlyog处理分号好像会有问题DELIMITER ;..._sqlyog创建函数
function add(x,y,f){ return f(x) + f(y);}//将Math.abs作为f传入add函数var x = add(-5,6,Math.abs);console.log('add:'+x);map/reduce如果我们想把一个函数f(x)=X2作用在一个数组[1,2,3,4,5,6]中,那么要怎么实现呢?首先先用传统的方法来实现//定义一个函数 var f = function(x){ return x * x;}var arr = [1,2
Map和Set中常用的一些方法。var jetset = Set("one","two")jetset += "three"println(jetset.contains("four"))println(jetset.contains("three"))jetset.foreach(arg => println(arg))print(jetset.size)import scal
文件标签栏换行展示你可能看过需要插件、写css的,但是现在只需要简简单单的配置就行啦,打开设置在工作区中搜索 workbench.editor.wrapTabs,给它打上勾勾就好啦,这个功能不知道什么版本才有的也是这次更新才发现的,所以在这里记录一下~效果:Microsoft Edge Tools for VS Code在扩展中搜索该插件进行安装,在调试的时候,我们可以在 vscode 中选择元素啦~安装好后,如果需要断点调试,可以先在JS文件中打好断点,然后启动项目:注意这里的地址哦~,_edge tools for vs code