OpenEdv-开源电子网

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

stm32的TIM1定时器能不能产生4MHZ的信号啊

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-6-27
在线时间
4 小时
发表于 2018-6-27 16:10:58 | 显示全部楼层 |阅读模式
3金钱
stm32的TIM1定时器能不能产生4MHZ的信号啊?我的定时器开起来,最多能达到2MHZ左右,再改预分频值和自动重装载寄存器周期值的也不会改变频率。。。。[mw_shl_code=applescript,true]void TIM1_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
  NVIC_InitTypeDef NVIC_InitStructure;  
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能

  //设置优先级  
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn;   
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       //从优先级0级  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
  NVIC_Init(&NVIC_InitStructure);         
  
  TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期值  
  TIM_TimeBaseStructure.TIM_Prescaler =(psc-1);//设置预分频值  
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割  
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式  
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重复计数设置  
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清中断标志位  
  
  TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);   
  
  TIM_Cmd(TIM1, ENABLE);  //使能TIMx外设  
}

//定时器3中断服务函数
void TIM1_UP_TIM10_IRQHandler(void)
{
                TIM_ClearITPendingBit(TIM1,TIM_IT_Update);  //清除中断标志位
                LED1=!LED1;//DS1翻转
}[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

你看看时钟对了吗?TIM1定时器用的是APB2的时钟对于F4系列来说是系统时钟的二分频,也就是84MHz,那么TIM1的输入时钟频率是APB2的两倍,也就是168MHz,根据这个还有溢出时间公式,可以合理计算自动重装值和时钟预分频系数了吧,另外产生50MHz的PWM波,你用168/50=3.36,你得使你的arr与psc的乘积等于3.36,这是不可能的,建议你好好看看资料。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-6-16
在线时间
31 小时
发表于 2018-6-27 16:10:59 | 显示全部楼层
你看看时钟对了吗?TIM1定时器用的是APB2的时钟对于F4系列来说是系统时钟的二分频,也就是84MHz,那么TIM1的输入时钟频率是APB2的两倍,也就是168MHz,根据这个还有溢出时间公式,可以合理计算自动重装值和时钟预分频系数了吧,另外产生50MHz的PWM波,你用168/50=3.36,你得使你的arr与psc的乘积等于3.36,这是不可能的,建议你好好看看资料。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-6-27
在线时间
4 小时
 楼主| 发表于 2018-6-27 16:17:35 | 显示全部楼层
还是说只能用PWM波生成这么快的信号?那PWM波可不可以生成50MHZ的方波?
回复

使用道具 举报

6

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2018-4-18
在线时间
10 小时
发表于 2018-6-27 17:52:14 | 显示全部楼层
看看有没有大神回复 挺感兴趣的~
回复

使用道具 举报

13

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-6-16
在线时间
31 小时
发表于 2018-6-27 17:54:55 | 显示全部楼层
另外看你程序,使能高级定时器要加上一句:TIM_CtrlPWMOutputs(TIM1, ENABLE);
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-6-27
在线时间
4 小时
 楼主| 发表于 2018-6-27 20:54:47 | 显示全部楼层
ZHOUHAO123 发表于 2018-6-27 17:54
另外看你程序,使能高级定时器要加上一句:TIM_CtrlPWMOutputs(TIM1, ENABLE);

谢谢回答。
我这段程序是只开了定时器,然后想用定时器的中断产生方波的,不是PWM波的程序。
时钟是对了,在2MHZ前的信号都是正确的。但是2MHZ以后,自动重装值和始终分频系数怎么变小都是生成2MHZ。所以我在想是不是定时器的计数不能太小。
回复

使用道具 举报

17

主题

354

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2017-5-21
在线时间
340 小时
发表于 2018-6-27 21:20:47 来自手机 | 显示全部楼层
输出IO配置成了2M低速?
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-7-30
在线时间
17 小时
发表于 2018-6-27 21:39:18 | 显示全部楼层
F103,72M主频,输出4Mhz,占空比36。把PWM那部分挪去用就行了。另发现高频输出时候占空比不可控,待高手解决。

BurshlessDriver.rar

450.81 KB, 下载次数: 49

回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-6-27
在线时间
4 小时
 楼主| 发表于 2018-6-28 12:59:31 | 显示全部楼层
l6931639 发表于 2018-6-27 21:20
输出IO配置成了2M低速?

没有,是100M高速的。
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-6-27
在线时间
4 小时
 楼主| 发表于 2018-6-30 14:15:07 | 显示全部楼层
感觉上如果只是单纯的用中断进行IO口的反转的话,最快是2MHZ,因为,在2MHZ以后,主函数将进不去了,所以速度上不去。。如果要做高频率的IO口反转的话,还是只能用PWM。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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