搜索
bottom↓
回复: 10

三行代码,求有经验的给菜鸟解释下定时器吧,

[复制链接]

出0入0汤圆

发表于 2013-9-3 10:18:50 | 显示全部楼层 |阅读模式
本帖最后由 孤独将一 于 2013-9-3 10:29 编辑
  1.         TIM_TimeBaseStructure.TIM_Period = arr;
  2.         TIM_TimeBaseStructure.TIM_Prescaler = psc;
  3.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;                 //TIM_CKD_DIV1
复制代码
就这三行。
最好举例子解释:
1:定时的时间与上面什么关系。比如1s
2:PWM与上面什么关系。这个我占空比会设定,但是脉冲宽度怎么设定,与上面有关系,但不知道函数对应关系

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-9-3 10:18:51 | 显示全部楼层
这个讲解怪麻烦,给你发一个例程吧,假如用8M晶振超频到72M,用STM32定时器3产生一个周期为20ms,高电平时间1.5ms的PWM 的代码如下:
void PWM_Configuration(void)//PWM初始化函数
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//T3时钟使能
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); //使能PORTC时钟


        //配置PWM输出通道初始化
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//选择PC
           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //模式为推挽输出
           GPIO_Init(GPIOC, &GPIO_InitStructure);   //初始化GPIOC寄存器
          GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 , ENABLE);            ///管脚重映射 将PC口和TIM3连接


        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定时器初始化结构
        TIM_OCInitTypeDef  TIM_OCInitStructure;//通道输出初始化结构


        //(1)TIM3初始化,时间基部分
        TIM_TimeBaseStructure.TIM_Period =19999;          //周期0~999
          TIM_TimeBaseStructure.TIM_Prescaler = 71;          //时钟分频
          TIM_TimeBaseStructure.TIM_ClockDivision = 0;       //时钟分割
          TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式
          TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);   //基本初始化


        //(2)TIM3通道初始化 ,CCP部分
        // 1通道
          TIM_OCStructInit(& TIM_OCInitStructure);                             //默认参数
          TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    //工作状态
          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //设定为输出,需要PWM输出才需要这行代码
          TIM_OCInitStructure.TIM_Pulse =1500 ;                                 //占空长度
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //高电平
          TIM_OC4Init(TIM3, &TIM_OCInitStructure);                             //通道初始化
         // 2通道
          TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    //工作状态
          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //设定为输出,需要PWM输出才需要这行代码
          TIM_OCInitStructure.TIM_Pulse =1500 ;                                 //占空长度
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //高电平
          TIM_OC3Init(TIM3, &TIM_OCInitStructure);                             //通道初始化  
        // 3通道
          TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    //工作状态
          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //设定为输出,需要PWM输出才需要这行代码
          TIM_OCInitStructure.TIM_Pulse =1500 ;                                 //占空长度
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //高电平
          TIM_OC2Init(TIM3, &TIM_OCInitStructure);  
        // 4通道
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                    //工作状态
          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //设定为输出,需要PWM输出才需要这行代码
          TIM_OCInitStructure.TIM_Pulse =1500 ;                                 //占空长度
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //高电平

          TIM_OC1Init(TIM3, &TIM_OCInitStructure);           
                  

        TIM_ARRPreloadConfig(TIM3, ENABLE);       //              
        TIM_Cmd(TIM3, ENABLE);                   //使能TIM3,到此在TIM中已配置完成     
        
}

出0入0汤圆

发表于 2013-9-3 10:40:52 | 显示全部楼层
菜鸟一枚

出0入0汤圆

发表于 2013-9-3 11:02:50 | 显示全部楼层
小菜路过!

出15入190汤圆

发表于 2013-9-3 11:19:12 | 显示全部楼层
这帖子怎么发的?鼠标一点会一栏一栏跟着,编辑界面一样啊,还能复制代码,代码直接复制过来?

出15入190汤圆

发表于 2013-9-3 11:41:26 | 显示全部楼层
renpeng009 发表于 2013-9-3 11:34
这套论坛系统有年头了吧,这么实用的功能你从来没发现?
  1. 之前还真的没用过啊,学习了
复制代码

出0入0汤圆

发表于 2013-9-3 12:58:29 | 显示全部楼层
+1小菜路过

出0入0汤圆

 楼主| 发表于 2013-9-3 13:48:17 | 显示全部楼层
本帖最后由 孤独将一 于 2013-9-3 13:57 编辑
Mr.luke2012 发表于 2013-9-3 10:18
这个讲解怪麻烦,给你发一个例程吧,假如用8M晶振超频到72M,用STM32定时器3产生一个周期为20ms,高电平时 ...


你那个定时周期是不是20ms,高对低占空比1500/20000

出0入0汤圆

发表于 2013-9-3 13:50:56 | 显示全部楼层
孤独将一 发表于 2013-9-3 13:48
你那个定时周期是不是20ms

是的呢  我把舵机控制的程序给拿出来了点 供你参考  STM32的分频要记得-1  所以才有72分频用71  2万却赋值19999

出0入0汤圆

发表于 2013-9-3 13:54:28 | 显示全部楼层
孤独将一 发表于 2013-9-3 13:48
你那个定时周期是不是20ms

要更改某个通道的占空比用如下函数即可 TIM_SetCompare1( TIM3, oc1_value);TIM_SetCompare2( TIM3, oc2_value);TIM_SetCompare3( TIM3, oc3_value);TIM_SetCompare4( TIM3, oc4_value);oc1_value到oc4_value就是你给的高电平占空比时间,以us为单位

出0入0汤圆

 楼主| 发表于 2013-9-3 14:15:05 | 显示全部楼层
Mr.luke2012 发表于 2013-9-3 13:54
要更改某个通道的占空比用如下函数即可 TIM_SetCompare1( TIM3, oc1_value);TIM_SetCompare2( TIM3, oc2_ ...


高对低占空比18500/20000
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 21:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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