OpenEdv-开源电子网

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

定时器1通道1(PA8)产生32.768k的PWM波频率有问题

[复制链接]

6

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-26
在线时间
10 小时
发表于 2016-5-13 16:56:35 | 显示全部楼层 |阅读模式
20金钱
      main.cTIM1_Init(2196,0);        PWM频率=72000/2197=32.768Khz
频率设置后依旧是32.768k怎么解决?
有没有更好的方法使PA8(MCO)输出32.768k


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-13 20:14:32 | 显示全部楼层
设置完是32.768?  那你还用改啥?
回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-26
在线时间
10 小时
 楼主| 发表于 2016-5-13 20:59:19 | 显示全部楼层
正点原子 发表于 2016-5-13 20:14
设置完是32.768?  那你还用改啥?

写错了,设置完了依旧是50HZ
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-5-13 21:39:28 | 显示全部楼层
仿真看寄存器值。估计你的分频没写进去。
回复

使用道具 举报

14

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2016-3-23
在线时间
46 小时
发表于 2016-5-13 21:47:58 | 显示全部楼层
软件仿真一下吧  看看是不是忘记改了预分频
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-5-14 15:58:24 | 显示全部楼层
调试是可以看寄存器的,直接看寄存器,看看配置对了没
回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2015-11-26
在线时间
10 小时
 楼主| 发表于 2016-5-16 11:47:32 | 显示全部楼层

RE: 定时器1通道1(PA8)产生32.768k的PWM波频率有问题

[mw_shl_code=c,true]#include "pwm.h"
#include "led.h"
  
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数


void TIM1_Init(u16 arr,u16 psc)                 //Advanced TIM
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        TIM_BDTRInitTypeDef TIM_BDTRInitStructure;


        RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1, ENABLE);    //RCC_APB2Periph_TIM1 in RCC_APB2ENR
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIOA, ENABLE);   

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                 //LED0-->PA.8 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_8);                                                 //PA.8 输出高
       
        //初始化定时器1
        TIM_TimeBaseStructure.TIM_Period =  65535; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
        TIM_TimeBaseStructure.TIM_Prescaler =2196; //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化TIM1
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                         //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //比较输出使能  ①
        TIM_OCInitStructure.TIM_Pulse = 0;                                                         //设置待装入捕获比较寄存器的脉冲值②
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;         //输出极性:TIM输出比较极性高
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;         //输出极性:TIM输出比较极性高③
        TIM_OCInitStructure.TIM_OCIdleState        = TIM_OCIdleState_Set;        //④
        TIM_OCInitStructure.TIM_OCNIdleState        = TIM_OCIdleState_Reset;    //⑤
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);                 


        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);                          //使能TIMx在CCR1上的预装载寄存器

        TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
        TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);

        TIM_ARRPreloadConfig(TIM1, ENABLE);                                                   //使能TIMx在ARR上的预装载寄存器
        TIM_Cmd(TIM1, ENABLE);                                                                            //使能TIMx外设
        TIM_CtrlPWMOutputs(TIM1, ENABLE);                                                          //pwm输出使能,一定要记得打开
}
///////////还是50HZ,怎么回事?[/mw_shl_code]
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2016-5-17 16:56:59 | 显示全部楼层
flyang 发表于 2016-5-16 11:47
[mw_shl_code=c,true]#include "pwm.h"
#include "led.h"
  

你这肯定不对呀。
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 2196;
你直接分频到了32.768Khz,那你更新计数有设置成65535。
TIM_OCInitStructure.TIM_Pulse = 0;
这个设置成0占空比会有?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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