STM32笔记之十一:捕捉精彩瞬间,脉冲方波长度捕获

发布者:晴天7777最新更新时间:2015-09-29 来源: eefocus关键字:STM32笔记  脉冲方波  长度捕获 手机看文章 扫描二维码
随时随地手机看文章
a)        目的:基础PWM输入也叫捕获,以及中断配合应用。使用前一章的输出管脚PB1(19脚),直接使用跳线连接输入的PA3(13脚),配置为TIM2_CH4,进行实验。

b)        对于简单的PWM输入应用,暂时无需考虑TIM1的高级功能之区别,按照目前我的应用目标其实只需要采集高电平宽度,而不必知道周期,所以并不采用PWM输入模式,而是普通脉宽捕获模式。

c)        初始化函数定义:

void TIM_Configuration(void);  //定义TIM初始化函数

d)        初始化函数调用:

TIM_Configuration();  //TIM初始化函数调用

e)        初始化函数,不同于前面模块,TIM的CAP初始化分为三部分——计时器基本初始化、通道初始化和时钟启动初始化:

void TIM_Configuration(void)//TIM2的CAP初始化函数

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定时器初始化结构

  TIM_ICInitTypeDef TIM_ICInitStructure;         //通道输入初始化结构

//TIM2输出初始化

  TIM_TimeBaseStructure.TIM_Period = 0xFFFF;     //周期0~FFFF

  TIM_TimeBaseStructure.TIM_Prescaler = 5;       //时钟分频

  TIM_TimeBaseStructure.TIM_ClockDivision = 0;   //时钟分割

  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式

  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//基本初始化

//TIM2通道的捕捉初始化  

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;//通道选择

  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;//下降沿

  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系

  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器

  TIM_ICInitStructure.TIM_ICFilter = 0x4;        //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF

  TIM_ICInit(TIM2, &TIM_ICInitStructure);        //初始化

  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);   //选择时钟触发源

  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//触发方式

  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发

  TIM_ITConfig(TIM2, TIM_IT_CC4, ENABLE);        //打开中断

TIM_Cmd(TIM2, ENABLE);                         //启动TIM2

}

f)        RCC初始化函数中加入TIM时钟开启:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM3, ENABLE);

g)        GPIO里面将输入和输出管脚模式进行设置。IN_FLOATING,50MHz。

h)        使用中断的话在NVIC里添加如下代码:

//打开TIM中断(与前一章相同)

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

i)        简单应用:

变量 = TIM_GetCapture4(TIM2);

j)        注意事项:

i.        由于我的需求只跟高电平宽度有关,所以避免了使用PWM输入模式,这样可以每个管脚捕捉一路信号。如果使用PWM模式,每一路需要占用两个寄存器,所以一个定时器只能同时使用两路PWM输入。

ii.        由于捕捉需要触发启动定时器,所以PWM输出与捕捉不容易在同一个TIM通道上实现。如果必须的话只能增加计数溢出的相关代码。

iii.        有些程序省略了捕捉通道的初始化代码,这是不对的

iv.        在基本计时器初始化代码里面注意选择适当的计数器长度,最好让波形长度不要长于一个计数周期,否则需要增加溢出代码很麻烦。一个计数周期的长度计算跟如下几个参数有关:

(1)        RCC初始化代码里面的RCC_PCLKxConfig,这是TIM的基础时钟源与系统时钟的关系。

(2)        TIM初始化的TIM_Period,这是计数周期的值

(3)        TIM初始化的TIM_Prescaler,这是计数周期的倍频计数器,相当于调节计数周期,可以使TIM_Period尽量大,提高计数精度。
关键字:STM32笔记  脉冲方波  长度捕获 引用地址:STM32笔记之十一:捕捉精彩瞬间,脉冲方波长度捕获

上一篇:STM32笔记之十:工作工作,PWM输出
下一篇:STM32笔记之十二:时钟不息工作不止,systic时钟应用

推荐阅读最新更新时间:2024-03-16 14:33

STM32学习笔记七——LED闪烁的三种控制方法
法一:软件延时(不精准) void delay_nms(u16 time) { u16 i=0; while(time--) { i=12000; while(i--); } } 方法二: main.c #include stm32f10x.h __IO uint32_t TimingDelay; /****************** *函数名称: LED_GPIO_Config() *功 能:实现LED等GPIO的配置 *参 数:无 *返 回 值:无 *作 者:Katter ******************/ void LED_GPIO_Config(void) {
[单片机]
STM32学习笔记----内存管理
1.简介 内存管理: 指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 内存管理的实现方法有很多种,最终都是要实现两个函数: malloc 和 free。 malloc :函数用于内存申请; free: 函数用于内存释放。 1.1 分块式内存管理原理 由上图可知,分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为 n块,对应的内存管理表,大小也为 n,内存管理表的每一个项对应内存池的一块内存。 内存管理表的项值代表的意义:当该项值为 0 的时候,代表对应的内存块未被占用;当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代
[单片机]
<font color='red'>STM32</font>学习<font color='red'>笔记</font>----内存管理
STM32学习笔记一一USART
1.串口的基本概念 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。 2.串口通信连接 接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。 RX:接收数据串行输。通过过采样技术来区别数据和
[单片机]
<font color='red'>STM32</font>学习<font color='red'>笔记</font>一一USART
STM32各模块学习笔记
STM32 中断优先级和开关总中断 一,中断优先级: STM32(Cortex-M3)中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器
[单片机]
STM32学习笔记(一)时钟和定时器
由于近期在准备海洋航行器比赛,正好趁此机会学习一下ARM,看到周围很多同学都在使用32,所以我也买了一块STM32F103ZET6,准备好好地学习一下。 STM32的时钟系统相当的复杂,包含了5个时钟源,分别是HSI HSE LSI LSE PLL,HSI是高速内部时钟、RC振荡器,频率为8M,HSE是高速外部时钟,即晶振,我的核心板上晶振为8M。LSI为低速内部时钟、RC振荡器,频率40k,LSE为低速外部时钟,接32.768kHz晶振,作为RTC时钟源。PLL为锁相环倍频输出,最大不超过72M。 我在学习定时器时先看的是TIM3,它挂载在APB1分频器上,APB1上面挂载的是低速外设,APB2上挂载高速外设。 在s
[单片机]
STM32 USB学习笔记2
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library STM32Cube库中提供了一些有关USB的例程,在其工程目录下的Applications目录中,这里打开STM3210E_EVAL目录,可以看到如下例程: 这里选取一个简单的例子CDC_Standalone,为一个USB通信例程,具体实现是一个USB转串口的功能,相当于USB串口线。把示例里面的inc和src目录下的文件拷贝到新建工程中,这里是把跟usb通信相关的文件放到了vcp目录下。文件目录结构如下: 其中BSP目录很简单,由于所购
[单片机]
应用笔记|管理STM32 MCU中的内存保护单元
1 前言 本应用笔记介绍如何管理 STM32 产品中的内存保护单元(MPU)。MPU 是用于存储器保护的可选组件。STM32 微控制器(MCU)中嵌入 MPU 之后变得更稳健可靠。在使用 MPU 之前,必须对其进行编程并加以启用。如果 MPU 没有启用,则存储系统的行为不会变化。 2 概述 MPU 可以使嵌入式系统更加稳健和安全:• 禁止用户应用程序破坏关键任务(例如操作系统核心)使用的数据• 将 SRAM 存储区域定义为非可执行(禁止执行 XN),以防止代码注入攻击• 修改存储访问属性MPU可最多保护16个内存区域。在 Armv6、Armv7 架构(Cortex-M0+、M3、M4、M
[单片机]
应用<font color='red'>笔记</font>|管理<font color='red'>STM32</font> MCU中的内存保护单元
stm32笔记:启动代码startup_stm32f10x_hd.s注解(2)
EXPORT WWDG_IRQHandler EXPORT PVD_IRQHandler EXPORT TAMPER_IRQHandler EXPORT RTC_IRQHandler EXPORT FLASH_IRQHandler EXPORT RCC_IRQHandler EXPORT EXTI0_IRQHandler EXPORT EXTI1_IRQHandler EXPORT EXTI2_IRQHandler EXPORT EXTI3_IRQHandler EXPORT EXTI4_IRQHandler EXPORT DMA1_Channel1_IRQHandler EXPORT DMA1_Channe
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved