看了好几天,终于知道怎么生成了,但原理不知道怎么来的,希望大佬讲解,这里只有我根据显示推算出来的结果。有错误请大家批评指正。
这是我参考的网站http://news.eeworld.com.cn/mcu/article_2016101130334.html
这里写出我整理的公式
哈哈哈这个图片转不过来了大家凑合看吧。
注意mode选择toggle on match
(原因可以看上文的链接)
打开输出比较中断
最下面的一个图中__HAL_TIM_SetCompare函数中,第一个设置的capture加的是高电平持续时间(us)也就是公式中的P1,第二个设置的低电平持续时间(us)也就是P2,频率由公式可以计算。
举个几个例子:
1、如果时钟是72M,psc设置的是72,第一个capture加的是500,第二个capture加的500,由公式知:频率=(1/0.001)*(72/72)=1000hz
2.如果时钟是72M,psc设置的是72,第一个capture加的是500,第二个capture加的800,由公式知:频率=(1/0.0013)*(72/72)约等于750hz
3.如果时钟是72M,psc设置的是36,第一个capture加的是500,第二个capture加的500,由公式知:频率=(1/0.001)*(72/36)约等于2000hz
HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_1);
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{static uint16_t capture = 0;
if(__HAL_TIM_GET_ITSTATUS(&htim3,TIM_IT_CC1)!=0)
{
__HAL_TIM_CLEAR_IT(&htim3,TIM_IT_CC1);
capture=__HAL_TIM_GET_COUNTER(&htim3);
switch (step1)
{
case 0:
step1=1;
__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,capture+100);//¸ßµãƽ´Ëʱ·ÖƵÆ÷ÊÇ72£¬¹«Ê½Îª1M/2/500=1000hz
break;
case 1:
step1=0;
__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,capture+200);//µÍµçƽ
break;
}
}
}