求助各位坛友,关于定时器定时的问题!!!

2019-07-20 06:33发布

新手村村民求助各位坛友,我想问一下,定时器的定时时间,下面的代码为什么是将定时器4定时1S。用的是8M的晶振,芯片是STM32l4RGT,我想的是用8M除以Prescaler再乘以Period应该是等于10 000 000Hz应该就是10MHz不应该是10S秒吗?
void tim4_init(void)
{
__HAL_RCC_TIM4_CLK_ENABLE();
Tim4Handle.Instance=TIM4;                          
Tim4Handle.Init.Prescaler=(uint32_t) (8000 - 1);                  
Tim4Handle.Init.CounterMode=TIM_COUNTERMODE_UP;   
Tim4Handle.Init.Period=10000-1;                        
Tim4Handle.Init.ClockDivision = 0;
HAL_TIM_Base_Init(&Tim4Handle);   
HAL_TIM_Base_Start_IT(&Tim4Handle);
HAL_NVIC_SetPriority(TIM4_IRQn,9,0);   
HAL_NVIC_EnableIRQ(TIM4_IRQn);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
易方亮
1楼-- · 2019-07-21 10:21
 精彩回答 2  元偷偷看……
HXYDJ
2楼-- · 2019-07-21 13:48
外部晶振还要经过倍频和分频才会得到定时器的时钟频率
易方亮
3楼-- · 2019-07-21 18:53
 精彩回答 2  元偷偷看……
易方亮
4楼-- · 2019-07-21 23:16
HXYDJ 发表于 2018-8-22 11:24
外部晶振还要经过倍频和分频才会得到定时器的时钟频率

麻烦再回答下我这个问题,谢谢   :   
uwPrescalerValue = (uint32_t) ((SystemCoreClock / 1000000) - 1);//1mhz 1us
这句代码也是其中一个定时器的,它的注释写着1us是为什么的?
其中SystemCoreClock的值是80 000 000 ,也就是预分频Prescaler是80 ,为什么预分频80,就是1us,晶振和上面一样的定时器是一样的
坐看风
5楼-- · 2019-07-22 01:50
易方亮 发表于 2018-8-22 12:03
麻烦再回答我以下这个问题:
        uwPrescalerValue = (uint32_t) ((SystemCoreClock / 1000000) - 1);//1mh ...

不是很懂楼主的意思
首先SystemCoreClock的值如果是8MHZ,那应该是8 000 000
其次在定时器时间计算中  t=(预分频+1)/clk*(重载值+1)
你这里用滴答定时器来举例和正常定时器配置是有区别的,楼主先去看看滴答定时器配置吧
HXYDJ
6楼-- · 2019-07-22 06:49
 精彩回答 2  元偷偷看……

一周热门 更多>