打印
[STM32F4]

定时器级联

[复制链接]
239|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kangzj|  楼主 | 2021-3-15 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用 stm32f407 的 TIM1 和 TIM8 级联组成 32 位计数器,TIM1 作为主计数器,TIM8 作为从计数器配置代码如下
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        RCC_APB2PeriphClockCmd (STD_TIM1_CLK, ENABLE);  /// 使能标准频率时钟 1
        RCC_APB2PeriphClockCmd (STD_TIM2_CLK, ENABLE);  /// 使能标准频率时钟 2
        
        // 标准频率定时器 1 配置
        TIM_TimeBaseInitStructure.TIM_Period = 0xFFFF;   // 自动重装载值
        TIM_TimeBaseInitStructure.TIM_Prescaler = 0;  // 定时器分频
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
        TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseInit(STD_TIM1, &TIM_TimeBaseInitStructure);

        TIM_SetCounter (STD_TIM1, 0);   // 清零计数器 CNT
        
        TIM_SelectOutputTrigger (STD_TIM1, TIM_TRGOSource_Update);//Tim1 更新输出作为触发信号
                        
        // 标准频率定时器 2 配置
        TIM_TimeBaseInitStructure.TIM_Period = 0xFFFF;   // 自动重装载值
        TIM_TimeBaseInitStructure.TIM_Prescaler = 0;  // 定时器分频
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
        TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseInit(STD_TIM2, &TIM_TimeBaseInitStructure);

        TIM_SetCounter (STD_TIM2, 0);   // 清零计数器 CNT
        
        TIM_SelectMasterSlaveMode (STD_TIM2, TIM_MasterSlaveMode_Enable);// 主从模式 MSM
        TIM_SelectSlaveMode (STD_TIM2, TIM_SlaveMode_External1);// 从模式外部触发模式
        TIM_SelectInputTrigger (STD_TIM2, TIM_TS_ITR0);// 触发选择,ITR0 即 TIM1
        TIM_Cmd(STD_TIM2, ENABLE);


其中 STD_TIM1 是 TIM1,STD_TIM2 是 TIM8.
我在 main 函数中启动 TIM1 后,用另一定时器 TIM2 定时 1 秒,在 TIM2 中断中用 TIM_GetCounter (STD_TIM2) * 65536 + TIM_GetCounter (STD_TIM1) 语句读出的数据是 4217116,
但是 TIM1 和 TIM8 的时基都应该是 168M,并且我没有配置分频,请问这个的原因是什么?
我用 TIM_GetCounter (STD_TIM2) * 65536 * 4 + TIM_GetCounter (STD_TIM1) 才能得到 168000000 的计数值。

经我仔细测试,发现只要TIM1计数不超过65535,也就是没有UEV更新事件时,计数值是正确的

使用特权

评论回复
沙发
chenjunt| | 2021-3-15 23:12 | 只看该作者
貌似是产生了更新事件丢失

使用特权

评论回复
板凳
dengdc| | 2021-3-15 23:14 | 只看该作者
感谢楼主分享

使用特权

评论回复
地板
jiahy| | 2021-3-15 23:16 | 只看该作者

非常好的经验分享

使用特权

评论回复
5
shimx| | 2021-3-15 23:18 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
6
liliang9554| | 2021-3-15 23:22 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
7
wuhany| | 2021-3-15 23:24 | 只看该作者
非常宝贵的经验啊

使用特权

评论回复
8
xxmmi| | 2021-3-15 23:26 | 只看该作者

非常宝贵的经验

使用特权

评论回复
9
香水城| | 2021-3-16 08:14 | 只看该作者
如果这样的话,tim8的时钟源就是TIM1的更新事件输出信号,且tim8工作在 外部时钟模式1 从模式。

TIM1与tim8的内部连接要依据手册上的表格来进行。

使用特权

评论回复
10
renzheshengui| | 2021-4-6 19:01 | 只看该作者
如何教更新事件丢失啊

使用特权

评论回复
11
wakayi| | 2021-4-6 19:04 | 只看该作者
在什么情况下回产生更新事件呢

使用特权

评论回复
12
wowu| | 2021-4-6 19:07 | 只看该作者
楼主用的什么时钟啊

使用特权

评论回复
13
xiaoqizi| | 2021-4-6 19:10 | 只看该作者
通过什么触发第二个定时器啊

使用特权

评论回复
14
木木guainv| | 2021-4-6 19:13 | 只看该作者
需要两个定时器工作在什么模式下啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

672

主题

7007

帖子

2

粉丝