OpenEdv-开源电子网

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

定时器 参数范围

[复制链接]

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
发表于 2013-6-23 22:33:24 | 显示全部楼层 |阅读模式

原子哥好,请问Min板的中断来产生频率可调的方波,我用定时器中断来实现,定时器中断的函数参数arr 和psc范围是分别是多少,好像arr或者psc为0的时候产生的方波会出错
而且产生的频率最大只能达到300KHZ

 

//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timerx_Init(u16 arr,u16 psc)

主函数关键地方

 Timerx_Init(1,1);//改变arr和psc在1-9范围内变化 输出的频率都不变???
 while(1)
 { 
 }

中断服务函数关键地方

void TIM3_IRQHandler(void)   //TIM3中断
{
 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
 {
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
  LED0=!LED0;//这里的PA5我有用示波器观察波形,频率最大为300K
 }
}


后来我查到了,是因为中断服务函数处理的事情太多了,导致频率上不去,后面用改用寄存器不用库函数,但是频率还是上不去,只能从原来的300K升到750K,不知道怎么改中断服务函数才能再提高上去频率,一下程序是修改后的

void TIM3_IRQHandler(void)   //TIM3中断
{
// if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
 {
//  TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
  LED0=!LED0;
  TIM3->SR&=~(1<<0);//清除中断标志位
 }
}


 

 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-24 00:21:36 | 显示全部楼层
回复【楼主位】lin111000713:
---------------------------------
不明白你用这个中断做什么....
stm32使用中断的时候,最频繁就这个量级了,700~900Khz吧,这么频繁的中断,你的CPU不要做其他事情了...天天就围着你的中断绕得了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
 楼主| 发表于 2013-6-24 10:16:40 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我就是用定时器专门用来在PA.8产生频率范围为25KHz到650KHz的方波,频率的步进是25KHz,CPU只干这个而已。我的问题是如何用寄存器操作,在PA.8产生反向的电位,其实现在的问题是如何把 LED0=!LED0;改为寄存器操作的,来实现PA.8电位反向,这样可以减少中断服务函数转换PA.8电位的时间
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-24 10:31:17 | 显示全部楼层
直接用PWM吧.
别用中断去取反了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
 楼主| 发表于 2013-6-24 16:08:51 | 显示全部楼层
用pwm可以了,最大可以到4M,4M以上就失真了。谢谢原子哥哈!!
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2013-6-25 09:05:43 | 显示全部楼层
回复【5楼】lin111000713:
---------------------------------

4M失真 是你的测试方式不对, 测试的时候需要做阻抗匹配的。 
阻抗匹配做好, 基本上 输出24MHz的时候 稍稍有些变形

如果你空载测试, 1M的时候 都有明显振铃 和失真
回复 支持 反对

使用道具 举报

40

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
255
金钱
255
注册时间
2013-5-22
在线时间
0 小时
 楼主| 发表于 2013-6-27 20:51:51 | 显示全部楼层
谢谢,是的1M的时候在边沿确实有类似脉冲的杂波,有点失真。我队友说可以接负载到地或者接负载到Vcc可以消除边沿这种现象
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 10:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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