历史上的今天
返回首页

历史上的今天

今天是:2025年08月19日(星期二)

正在发生

2021年08月19日 | STM32 定时器时钟配置技巧

2021-08-19 来源:eefocus

众所周知

STM32 的时钟配置比较复杂,而定时器的时钟配置更是 ‘奇葩‘。 如下图(截图自STM32F4编程手册)APB的预分频器分频系数如果不为1,则定时器的时钟就倍频了反而。

配置技巧

下面以STM32F4为例, 这里配置定时器8的计数频率为 10Khz,从时钟树中可知TIM8挂在APB2总线


获取当前 APB2(PLCK2) 的时钟频率

获取 APB2 预分频器的分频值

根据上述参数判断,如果分频值不为1,则定时器时钟 x2

.Prescaler = xxx 这是一个推荐的写法

int hw_timer_init(TIM_HandleTypeDef *htim)

{

    uint32_t FLatency, t8Clk;

    RCC_ClkInitTypeDef clkCfg;


    TIM_ClockConfigTypeDef sClockSourceConfig = {0};

    TIM_OC_InitTypeDef sConfigOC = {0};


    /* USER CODE BEGIN TIM_Init 1 */


    t8Clk = HAL_RCC_GetPCLK2Freq();

    HAL_RCC_GetClockConfig(&clkCfg, &FLatency);


    if (clkCfg.APB2CLKDivider != RCC_HCLK_DIV1) {

        t8Clk = HAL_RCC_GetPCLK2Freq() * 2;

    }


    /* USER CODE END TIM1_Init 1 */


    htim->Instance = TIM8;

    htim->Init.Prescaler =  (t8Clk / 10000) - 1;// 10K

    htim->Init.CounterMode = TIM_COUNTERMODE_UP;

    htim->Init.Period = 0xFFFF;

    htim->Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

    htim->Init.RepetitionCounter = 0;

    htim->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

    HAL_TIM_Base_Init(htim);

    

    ...

    

    return 0;

}


总结

这种配置方法最大的好处就是该定时器不受底层时钟配置的影响,移植性也更好。你甚至都不需要知道当前的具体时钟信息(当然作为一个好的Mcuer你应该知道自己在做什么)。

其实在很多地方我们都可以借鉴这种方法,而不是只会写绝对值。


推荐阅读

史海拾趣

Fagor Electrónica公司的发展小趣事

然而,随着市场竞争的加剧和技术的快速变革,Fagor Electrónica也面临着前所未有的挑战。为了应对这些挑战,公司不断加大研发投入,积极引进先进技术和管理经验。同时,Fagor Electrónica还加强了与供应商和客户的合作,以共同应对市场变化。这些努力使得公司在激烈的市场竞争中保持了领先地位。

Gould Fiber Optics公司的发展小趣事
根据实验需求选择合适的电源电路类型,如线性电源、开关电源等。线性电源输出稳定但效率低,适用于对纹波要求高的场合;开关电源效率高但纹波较大,适用于对效率要求高的场合。
GREATECS公司的发展小趣事
可能是电源插头未插好、保险丝熔断、输入电压异常或电源内部元件损坏。
国炬(GOOGLL)公司的发展小趣事
静态工作点的设置对功放电路的性能有重要影响。需要确保静态工作点稳定且适当,以避免出现交越失真等问题。
Eink公司的发展小趣事
随着电子纸技术的不断发展,其应用领域也逐渐拓宽。在2002年3月的东京国际书展上,第一张彩色电子纸的出现引起了轰动。此后,电子纸开始被广泛应用于电子书阅读器、电子标签、公交站牌等领域。E-Ink公司作为电子纸技术的领军企业,推动了整个电子纸行业的发展。
台湾富晶(FORTUNE)公司的发展小趣事
使用滤波器或隔离器等设备隔离输入信号的干扰。

问答坊 | AI 解惑

电纸书真的有那么好吗?

亚马逊11月Kindle销量创纪录,价格贵还那么多人买,那玩意儿到底是什么技术?…

查看全部问答>

2010年北京市电子竞赛的通知

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 2010年北京市电子竞赛的通知 关于2010年北京市电子竞赛的通知根据教育部教高司函〔1999〕41号文件及全国大学生电子设计竞赛组委会电组字〔2001〕01号文件精神,市教委定于2010年5月29日(星期六)8 ...…

查看全部问答>

关于2440支持k9f1gu08 nandflash 的问题

我现在使用k9f1gu08m 这款大容量nandflash,找到了支持的jtag烧写程序,但是读不出id号, 测量读写NAND FLASH的 所有波形都有,发的读ID命令也正确,但是nand flash 没有数据输出,数据线都是高电平。这是什么原因。 flash的PRE引脚需要怎么处理?…

查看全部问答>

关于IHV Entension DLL开发

有谁有关于Native 802.11 IHV Extensions DLL开发的资料啊?除了MSDN上面的。我想在IHV sample service之上添加一些Virtual station的东西。缺少这方便的资料。 有这方面经验的,请指教。。…

查看全部问答>

求助多个51单片机串口通讯问题

各位大虾,我现在想用一个51单片机做主机,很多51单片机做从机,将从机的TX和RX串联起来做成一个串口总线,连接在主机的串口引脚上,不知道一个主机能带多少从机(越多越好,需求大概是50个上下)。…

查看全部问答>

NXP基于M3内核的150M芯片都推广了,ST怎么回事啊!太慢了!

                                 NXP基于M3内核的150M芯片都推广了,ST怎么回事啊!太慢了!…

查看全部问答>

AM335X WINCE RS485调试

众所周知,RS485的工作流程是,在发送时必须把 GPIO输出一个电平,在接收时,必须把GPIO设置为另一个电平,这样才可以让 485芯片处于接收数据的状态,并且要及时切换485的收发状态,否则有可能造成485最后一个字节没有发送,或第1个字节无法接收等 ...…

查看全部问答>