当前位置: 首页 > news >正文

沧县网站制作价格seo建站技巧

沧县网站制作价格,seo建站技巧,百度页面推广,网站建设包含图文设计一、输入捕获概念 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例,用一个简图来说明输入捕获的原理,如图1所示: 图1:输入捕获脉宽测量原理图 STM32F4的输入捕获,简单的说就是通过检测TIMx_CHx上的…

一、输入捕获概念

       输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量脉宽为例,用一个简图来说明输入捕获的原理,如图1所示:

图1:输入捕获脉宽测量原理图

        STM32F4的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等。

  本文我将用TIM5_CH1来捕获高电平脉宽,捕获原理如图1所示,我就不多介绍了。

二、输入捕获功能及应用

       捕获波形:功能,把模拟信号的边沿捕获,得到波形时间。如图2所示:

图2:输入捕获波形图解

   遥控器:一般两种(蓝牙遥控器),(红外遥控器),(有线遥控器)

  发送装置如图3所示:

图3

   接收装置如图4所示:

图4

        输入捕获:可以捕获红外发送过来的波形,通过每个波形的高低电平时间,知道你是什么样的键值

       遥控器:每个按键都不一样、每个按键都有不同的键值,键值会通过红外发送,就使用红外接收进行输入捕获。

       因为我的硬件设备上没有遥控器,也没有接收。所以在我的硬件设备这里没办法实现。但是可以使用按键,可以捕获按键的按下时间,从而达到捕获的效果。

        可以用于捕获按键高低电平持续时间,捕获波形时间。

三、输入捕获模式

       在输入捕获模式下,当相应的ICx信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx)来锁存计数器的值。发生捕获事件时,会将相应的CCXIF标志(TIMx_SR寄存器)置1,并可发送中断或DMA请求(如果已使能)。如果发生捕获事件时CCxIF标志已处于高位,则会将重复捕获标志CCxOF(TIMx_SR寄存器)置1。可通过软件向CCxIF写入0来给CCxIF清零,或读取存储在TIMx_CCRx寄存器中的已捕获数据。向CCxOF写入0后会将

其清零。具体内容如下图所示:

四、输入捕获函数配置步骤

        1、开启TIM5时钟,配置PA0为复用功能(AF2),并开启下拉电阻;

        2、初始化TIM5,设置TIM5的ARR和PSC;

        3、设置TIM5的输入捕获参数,开启输入捕获;

        4、使能捕获和更新中断(设置TIM5的DIER寄存器);

        5、设置中断优先级,编写中断服务函数;

        6、使能定时器(设置TIM5的CR1寄存器)。

五、TIM_ICInitTypeDef的定义及结构体中参数说明

    typedef struct{

        uint16_t TIM_Channel;//通道

        uint16_t TIM_ICPolarity;//捕获极性

        uint16_t TIM_ICSelection;//映射

        uint16_t TIM_ICPrescaler;//分频系数

        uint16_t TIM_ICFilter; //滤波器长度

} TIM_ICInitTypeDef;

六、代码示例

1、tim5.c
//定时器5通道1输入捕获配置
//arr:自动重装值(TIM2,TIM5是32位的!!)psc:时钟预分频数TIM_ICInitTypeDef  TIM5_ICInitStructure;  
void TIM5_CH1_Cap_Init(u32 arr,u16 psc){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);  //TIM5时钟使能        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能PORTA时钟GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_0; //GPIOA0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能GPIO_InitStructure.GPIO_Speed       = GPIO_Speed_100MHz;//速度100MHzGPIO_InitStructure.GPIO_OType       = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd        = GPIO_PuPd_DOWN; //下拉GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA0GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5); //PA0复用位定时器5TIM_TimeBaseStructure.TIM_Prescaler     = psc;  //定时器分频        TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up; //向上计数模式    TIM_TimeBaseStructure.TIM_Period        = arr;   //自动重装载值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);TIM5_ICInitStructure.TIM_Channel     = TIM_Channel_1; //选择输入端IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity  = TIM_ICPolarity_Rising;//上升沿捕获TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上            TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//配置输入分频,不分频    TIM5_ICInitStructure.TIM_ICFilter    = 0x00;//IC1F=0000配置输入滤波器不滤波TIM_ICInit(TIM5, &TIM5_ICInitStructure);//初始化TIM5输入捕获参数TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新和捕获中断TIM_Cmd(TIM5,ENABLE );//使能定时器5NVIC_InitStructure.NVIC_IRQChannel                   = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级2     NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 0;//响应优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;//IRQ通道使能NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器、
}/**************************************************************************
//捕获状态//[7]:0,没有成功的捕获;1,成功捕获到一次.
//[6]:0,还没捕获到低电平;1,已经捕获到低电平了.
//[5:0]:捕获低电平后溢出的次数(对于32位定时器来说,1us计数器加1,溢出时间:4294秒)
u8 TIM5CH1_CAPTURE_STA=0;//输入捕获状态
u32TIM5CH1_CAPTURE_VAL;//输入捕获值(TIM2/TIM5是32位)
**************************************************************************/
//定时器5中断服务程序
void TIM5_IRQHandler(void){//还未成功捕获if((TIM5CH1_CAPTURE_STA&0X80)==0){//溢出if(TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){//已经捕获到高电平了if(TIM5CH1_CAPTURE_STA&0X40){//高电平太长了if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F){TIM5CH1_CAPTURE_STA |= 0X80;//标记成功捕获了一次TIM5CH1_CAPTURE_VAL = 0XFFFFFFFF;}else TIM5CH1_CAPTURE_STA++;}}//捕获1发生捕获事件if(TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET){//捕获到一个下降沿if(TIM5CH1_CAPTURE_STA&0X40){TIM5CH1_CAPTURE_STA |= 0X80;//标记成功捕获到一次高电平脉宽                        TIM5CH1_CAPTURE_VAL = TIM_GetCapture1(TIM5);//获取当前的捕获值.TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //设置上升沿捕获}//还未开始,第一次捕获上升沿else {TIM5CH1_CAPTURE_STA = 0;//清空TIM5CH1_CAPTURE_VAL=0;TIM5CH1_CAPTURE_STA |= 0X40;//标记捕获到了上升沿TIM_Cmd(TIM5,ENABLE );//使能定时器5TIM_SetCounter(TIM5,0);//计数器清空TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//设置下降沿捕获            TIM_Cmd(TIM5,ENABLE );//使能定时器5}}}TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}
2、tim5.h
#ifndef _TIM5_H_
#define _TIM5_H_#include "stm32f4xx.h"
#include "stdio.h"void TIM5_CH1_Cap_Init(u32 arr,u16 psc);#endif
3、main.c
extern u8  TIM5CH1_CAPTURE_STA; //输入捕获状态
extern     u32TIM5CH1_CAPTURE_VAL;//输入捕获值
int main(void){long long temp = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2SysTick_Init(168);  //初始化延时函数uart_init(115200);//初始化串口波特率为115200TIM14_PWM_Init(500-1,84-1);//84M/84=1Mhz的计数频率计数到500,频率为1M/500=2Khz TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1);//以84M/84=1Mhz的频率计数while(1){Delay_ms(10);TIM_SetCompare1(TIM14,TIM_GetCapture1(TIM14)+1);if(TIM_GetCapture1(TIM14)==300)TIM_SetCompare1(TIM14,0);//成功捕获到了一次高电平if(TIM5CH1_CAPTURE_STA&0X80){temp = TIM5CH1_CAPTURE_STA&0X3F;temp *= 0XFFFFFFFF;//溢出时间总和temp += TIM5CH1_CAPTURE_VAL;  //得到总的高电平时间printf("HIGH:%lld us\r\n",temp);//打印总的高点平时间TIM5CH1_CAPTURE_STA = 0;//开启下一次捕获}}
}

七、下载验证结果

        在完成代码编写之后,将编译好的文件下载到我们的硬件开发板上,此时,可以看到DS0的状态由暗到亮的循环。即可说明程序已正常在执行了,然后再打开串口调试助手,选择对应的串口,按下KEY_UP按键,可以看到串口打印的高电平持续时间,如下图所示:

        从上图中可看出,其中有2次高电平在50us以内的,这种就是按键按下时发生的抖动。这就是为什么我们按键输入的时候,一般都需要做防抖处理,防止类似的情况干扰正常输入。大家还可以用杜邦线连接PA0和PF9,具体的内容可参考STM32F4开发指南库函数版本中第十四章PWM输出实验

八、总结

         输入捕获是一种用于测量和捕获外部信号的功能,常用于测量信号的频率、周期、占空比等参数。通过配置定时器和GPIO引脚,并设置输入捕获通道的工作模式和触发条件,来实现信号的捕获和测量。通过中断处理程序读取输入捕获寄存器的值,可以获取外部信号的相关参数。学习了输入捕获需要了解定时器和GPIO引脚的配置,掌握了输入捕获通道的设置和中断处理方法,并参考相关的芯片手册和开发环境文档进行实际应用。

九、其他说明

      《STM32F4开发指南—库函数版本》可到我的资源进行下载。

       TIM14_PWM_Init 函数代码编写可参考9.PWM简单介绍章程。

注意:本人所写文章内容均用于记录自己在学习嵌入式的成长过程!!!!!

http://www.dinnco.com/news/66389.html

相关文章:

  • 网站建设公司能信吗正在直播足球比赛
  • 群晖怎么做网站电商网站
  • 用网站做平台有哪些seo的中文含义是
  • 台州最新消息今天最新动态北京seo网络优化招聘网
  • 成都网站制作价格灰色行业关键词推广
  • 东莞长安做网站培训心得简短
  • 微信网站制作价格推广公司运营模式
  • wordpress 评论 html合肥网站seo
  • 恶意网站怎么办南京seo外包平台
  • 单位建网站天津海外seo
  • 深圳网站建设外贸公司排名太原seo建站
  • 泉州网站建设哪家专业海外推广解决方案
  • 做设计必知网站seo自学网app
  • 上海哪家做网站好十大中文网站排名
  • 廊坊哪里能够做网站必应搜索国际版
  • 瑞安做网站多少钱百度客服中心人工在线电话
  • 做网站开发的有哪些公司互联网营销师证书是国家认可的吗
  • wap网站开发招聘百度平台商家联系方式
  • 4徐汇区网站建设seo品牌
  • 做营销型网站的企业网站推广怎样做
  • 溧阳免费做网站北京百度推广电话号码
  • 杭州自适应网站建设怎么制作网站二维码
  • 百度网站解封西安seo关键字优化
  • 在线作图网站seo顾问是什么职业
  • 如何在网站上做用工登记网络竞价托管公司
  • 新手学做网站pdf下载seo搜索引擎优化简历
  • wordpress点餐重庆百度整站优化
  • php网站开发cms站长工具介绍
  • 合肥设计网站公司曹操博客seo
  • 广东品牌网站建设报价表营销最好的方法