5962|8

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32定时器产生方波的奇怪问题,欢迎讨论 [复制链接]



我的问题是这样,目前我使用的芯片时stm32f101c6,开发环境keil MDK4.0,外部时钟8Mhz,我计划在port A的第一脚上输出占空比为50,频率为214k的方波,产

生方波的方案是使用定时器2定时中断来完成。
时钟相关配置:


/* PLLCLK = 8/2MHz * 9 = 36 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_9);
/* HCLK = SYSCLK=36Mhz */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK1 = HCLK/2=18Mhz */


/*因为当PCLK1预分频大于1时定时器2的输入时钟自动2倍频,因此定时器2的输入时钟36Mhz*/
RCC_PCLK1Config(RCC_HCLK_Div2);

/* 36M/(83+1)/2=214.2k */
  TIM_TimeBaseStructure.TIM_Period = 83;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

中断函数
void TIM2_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  {
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

    GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)));
  }
}

按照设计,系统时钟为8/2*9=36Mhz,PCLK1时钟为系统时钟的2分频18Mhze,因为PCLK1进行了分频,所以从PCLK1引出的到
TIME2的计数时钟由硬件自动2倍频到36MHZ,timer2的计数值为83,应该产生频率为36M/(83+1)/2=214.2k,占空比为50%的方波,
事实上产生的波形频率为143k,占空比为57%的方波

奇怪的是当我改变PLL时钟源预分频为1,同时将PCLK1分频系数调整为4的时候,即配置成以下形式
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PCLK1Config(RCC_HCLK_Div4);
也就是系统时钟变为72MHZPCLK1时钟变为72/4=18Mhz,TIME2时钟2倍频后变为36Mhz,及理论上timer2的输入计数时钟不变,
这个时候我得到的波形确完全和预计一样频率214.2k,占空比50%,
这是怎么回事呢???要知道STM32101C6芯片本身支持的最大频率为36MHz,我配置到72Mhz的系统时钟
居然可以正常工作???不知道大家是否遇到过相似的情况,请帮助下
先谢谢各位了
此帖出自stm32/stm8论坛

最新回复

                                 关注,  详情 回复 发表于 2009-12-21 20:38
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 你是否说你超速了,但没见到警察?
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你是否说你超速了,但没见到警察?
老大,你要看关键的啊,正常的36M没有工作,72M就算工作了,也不放心啊。。。
等待高手解答
此帖出自stm32/stm8论坛
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 你的中断太频繁了,占用了大量的系统时钟,当系统去执行中断调用指令时,计数器已经走了很多
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

5
 
你的中断太频繁了,占用了大量的系统时钟,当系统去执行中断调用指令时,计数器已经走了很多
也许就是这样,但是我用软件仿真的时候发现中断处理程序不到1.5us。非常感谢!用定时器的PWM方式问题基本解决,来结个贴。经过多次试验,用中断的方式很难在端口上产生四百多K的信号,不仅频率不正确而且占空比也不对。现在用定时器的PWM基本可以完成这个要求。只是PWM在频率转换的节点会产生对不齐的情况。谢谢大家的关注
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 节点不对齐,延时了?
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 中断和顺序执行是两个各有长短处的方法,各有各的适用场合,没有绝对的,不要以为所有的应用都是中断方式节省时间
此帖出自stm32/stm8论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

8
 
“PWM在频率转换的节点会产生对不齐的情况”,这是一种什么情况?

如果是说在一个PWM周期没有结束时,新频率的周期又开始了这种情况,那么你只需要设置TIMx_CR1寄存器的ARPE位,使能自动重装载的预装载寄存器,这样输出比较寄存器的数值只会在更新事件时才会被更新为新的数值,实现了你要求的对齐。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 关注,
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表