OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2127|回复: 1

战舰V3定时器设置PWM,频率比计算中高一点

[复制链接]

2

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
164
金钱
164
注册时间
2019-8-19
在线时间
47 小时
发表于 2019-11-8 15:43:45 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 zryblog 于 2019-11-8 17:10 编辑

先上代码


  1. tim_tbinit.TIM_ClockDivision = TIM_CKD_DIV1;
  2. tim_tbinit.TIM_CounterMode = TIM_CounterMode_Up;
  3. tim_tbinit.TIM_Period = 0xffff;   //预设
  4. tim_tbinit.TIM_Prescaler =  71; //1Mhz
  5. //tim_tbinit.TIM_RepetitionCounter =
  6. TIM_TimeBaseInit(TIM,&tim_tbinit);
复制代码

  
  1. u16 temp_arr=(u32)1000000/frequency-1;
  2.   
  3.   TIM_SetCounter(TIM,0);
  4.   TIM_SetAutoreload(TIM,temp_arr);
  5.   TIM_SetCompare1(TIM,(temp_arr>>1));
  6.   TIM_Cmd(TIM,ENABLE);
复制代码

上面第一段是tim3的初始化代码,分频一兆.
下面是设置PWM频率的代码,ferquency是频率.
现在问题出在实际输出的频率,比计算的频率高点
比如设置12.8Khz  实际是12.81Khz
6.4Khz  实际是6.41Khz6.42Khz

这是为什么 ?  是不是我程序的设计上有问题?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

175

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1327
金钱
1327
注册时间
2019-7-11
在线时间
165 小时
发表于 2019-11-11 08:49:56 | 显示全部楼层
u16 temp_arr=(u32)1000000/frequency-1;精度会有损失吧
世界和平
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 11:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表