如何设计网站中的上传功能,国栋建设网站,施工许可证查询官网,西宁网站制作费用是多少钱前言输入捕获的考题十分明确#xff0c;就是测量输入脉冲波形的占空比和频率#xff0c;对我们的板子而言#xff0c;就是检测板载的两个信号发生器产生的信号#xff1a;具体来说就是使用PA15和PB4来做输入捕获。输入捕获原理简介输入捕获能够对输入信号的上升沿和下降沿进…前言输入捕获的考题十分明确就是测量输入脉冲波形的占空比和频率对我们的板子而言就是检测板载的两个信号发生器产生的信号具体来说就是使用PA15和PB4来做输入捕获。输入捕获原理简介输入捕获能够对输入信号的上升沿和下降沿进行捕获并且记录下捕获时定时器的数值以及触发中断。借用一张图来阐明这个动作边沿触发产生捕获中断中断中读取当前的计数值CCR并且将计数值清零退出中断因此通过计数值可以计算出高电平持续时间这里面有一个溢出的问题对于我们的信号发生器来说其信号的频率比较高计数器不会发生溢出因此不需要考虑。根据功能分为两类普通输入捕获只能测频率PWM输入模式可以测频率和占空比普通输入捕获一、CubeMX配置以及之后要记得打开中断二、Keil软件编写开启捕获HAL_TIM_IC_Start(htim3,TIM_CHANNEL_1);第一个参数是定时器句柄在tim.c中定义第二个参数是通道编写回调函数 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim-InstanceTIM3) //判断是哪个定时器触发{if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_1) //判断是哪个通道触发{CounterHAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1)1;//获取计数值1Freq1000000/Counter;//计算频率}}
}
进入回调函数后先判断定时器类型再判断是哪个通道完成之后再获取计数值并且完成频率计算。PWM输入捕获双通道模式一、CubeMX配置类似普通单通道输入捕获这里就是将通道2的输入通道设置为简介模式并且在下面的配置中将其捕获的极性设置为下降沿双通道的原理借用下图展示我们只需要看一个周期其它周期都一样这样一来通道一捕获的值为整个周期的持续时间通道二捕获的值即为高电平的持续时间这也为咱们的程序设计提供了依据。二、Keil软件编写开启捕获HAL_TIM_IC_Start_IT(htim3, TIM_CHANNEL_1);//开启CH1输入捕获中断
HAL_TIM_IC_Start_IT(htim3, TIM_CHANNEL_2);//开启CH2输入捕获中断编写中断回调函数//输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim-InstanceTIM3){if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_1){T_Count HAL_TIM_ReadCapturedValue (htim,TIM_CHANNEL_1)1;//得到周期值Freq 1000000 / T_Count;Duty (float)D_Count/T_Count * 100;}else if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_2){D_Count HAL_TIM_ReadCapturedValue (htim,TIM_CHANNEL_2)1;//得到占空比} }
}
由于我们使用双通道模式因此无论是启动操作还是回调函数都必须要写两个通道这样代码思路就十分明确便于我们记忆。总结想要在比赛中正确地完成输入的捕获我们需要掌握两点内容CubeMX配置只能通过不断练习来记忆Keil代码编写主要记忆思路启动捕获中断回调函数编写对于程序的思路首先启动捕获中断HAL_TIM_IC_Start();注意双通道要写两个其次回调函数编写void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)注意双通道时一个通道测周期一个通道测高电平持续时间。