OpenEdv-开源电子网

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

定时器疑问

[复制链接]

19

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2015-9-26
在线时间
7 小时
发表于 2016-3-2 22:39:48 | 显示全部楼层 |阅读模式
1金钱
        /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = 999;  //1KHz
        TIM_TimeBaseStructure.TIM_Prescaler = 0;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
        //TIM2预分频设置:1MHZ,APB1分频系数2,输入到TIM3时钟为36MHzx2 = 72MHz  
        TIM_PrescalerConfig(TIM2,71, TIM_PSCReloadMode_Immediate);               

        /* Channel 2 and 3 Configuration in PWM mode */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
        TIM_OCInitStructure.TIM_Pulse = Channel2Pulse;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;       
       
        TIM_OC2Init(TIM2, &TIM_OCInitStructure);

        TIM_OCInitStructure.TIM_Pulse = Channel3Pulse;//占空比
        TIM_OC3Init(TIM2, &TIM_OCInitStructure);
这些红字的配置是配置的什么东西?
这是所有配置是定时器一个通道的配置
还是
黑体的是通道2 红色的是通道3的?
有疑问

最佳答案

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

一段时间不去看,就忘记了。。但是。。。。。 方法一定要知道。。。 进入:TIM_OC2Init函数,然后搜你要知道的这个东东:TIM_OutputNState 可以找到: assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState)); tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState CCER = tmpccer; 看到这里,就很容易了。 简单的总结就是0x0004的值左移4位,是位6.。。再去看中文参考手册中定时器CCER ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

354

主题

1475

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
8096
金钱
8096
注册时间
2015-10-15
在线时间
2919 小时
发表于 2016-3-2 22:39:49 | 显示全部楼层
一段时间不去看,就忘记了。。但是。。。。。
方法一定要知道。。。
进入:TIM_OC2Init函数,然后搜你要知道的这个东东:TIM_OutputNState
可以找到:
   assert_param(IS_TIM_OUTPUTN_STATE(TIM_OCInitStruct->TIM_OutputNState));
    tmpccer |= (uint16_t)(TIM_OCInitStruct->TIM_OutputNState << 4);

根据第一句,根据我们手册或者视频讲解,我们很容易找到这个变量的取值范围:
#define TIM_OutputNState_Disable           ((uint16_t)0x0000)
#define TIM_OutputNState_Enable            ((uint16_t)0x0004)

再看第二句,很明显,接下来我们要看tmpccer 到底写给了哪个寄存器。。。。于是继续看下面很容易找到:
  TIMx->CCER = tmpccer;

看到这里,就很容易了。
简单的总结就是0x0004的值左移4位,是位6.。。再去看中文参考手册中定时器CCER的位6是什么,就是你要的答案。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-3-3 00:39:31 | 显示全部楼层
我只会寄存器方法, 这个我还真不知道
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-3 14:25:35 | 显示全部楼层
有些定时器可以实现互补输出
就是你在引脚复用里看到的TIM_CH1和TIM_CH1N,
后者是前者的互补输出引脚,它的极性、相位、初相都可以设置
0.png
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 05:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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