stm32hal库输出比较--生成随机频率与占空比的方波

看了好几天,终于知道怎么生成了,但原理不知道怎么来的,希望大佬讲解,这里只有我根据显示推算出来的结果。有错误请大家批评指正。

这是我参考的网站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;
    }	
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值