历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2021年06月25日 | STM32高分辨率定时器(HRTIM)使用笔记

2021-06-25 来源:eefocus

简介:STM32高分辨率功能非常强大,寄存器数量非常多,使用起来也比较麻烦,本文使用HRTIM1产生一组互补输出的PWM。


高分辨率定时器的初始化比普通定时器要复杂得多,


HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;//配置输出特性,高低电平等


HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;//配置基本参数,这部分和普通定时器一样


HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure; //配置不同模式


HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;//配置波形参数,错误等


HRTIM_CompareCfgTypeDef HRTIM_CompareStructure;//配置比较寄存器


用以上几个部分就能产生最简单的PWM波形


HRTIM_DeadTimeCfgTypeDef HRTIM_DeadtimeStructure;//配置死区时间和性质




HRTIM_FaultCfgTypeDef HRTIM_FaultCfgStructure;//配置错误输入


HRTIM_ADCTriggerCfgTypeDef HRTIM_ADCTrigStructure; //配置ADC触发信号



HRTIM_BurstModeCfgTypeDef HRTIM_BurstStructure;//配置Burst模式


等等,还有很多初始化参数和初始化函数,基本分为简单基本功能相关函数,波形相关,输出相关,中断、DMA等模块;


下面的程序用HRTIM产生一组简单的PWM波形,50%占空比,无死区




#define PERIOD 46080 //100k频率,PERIOD=4.608G/100k



void HRTIM_Config(void)


{


HRTIM_OutputCfgTypeDef HRTIM_TIM_OutputStructure;


HRTIM_BaseInitTypeDef HRTIM_BaseInitStructure;


HRTIM_TimerInitTypeDef HRTIM_TimerInitStructure;


HRTIM_TimerCfgTypeDef HRTIM_TimerWaveStructure;


HRTIM_CompareCfgTypeDef HRTIM_CompareStructure;


HRTIM_DeadTimeCfgTypeDef HRTIM_DeadtimeStructure;




RCC_HRTIM1CLKConfig(RCC_HRTIM1CLK_PLLCLK);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_HRTIM1,ENABLE);




HRTIM_DLLCalibrationStart(HRTIM1, HRTIM_CALIBRATIONRATE_14);


HRTIM1_COMMON->DLLCR |= HRTIM_DLLCR_CALEN;


while(HRTIM_GetCommonFlagStatus(HRTIM1, HRTIM_ISR_DLLRDY) == RESET);




GPIO_HRTIM_outputs_Config();




HRTIM_BaseInitStructure.Mode=HRTIM_MODE_CONTINOUS;


HRTIM_BaseInitStructure.Period=PERIOD;


HRTIM_BaseInitStructure.PrescalerRatio=HRTIM_PRESCALERRATIO_MUL32;


HRTIM_BaseInitStructure.RepetitionCounter=0x00;


//HRTIM_SimpleBase_Init(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_BaseInitStructure);




HRTIM_TimerInitStructure.HalfModeEnable = HRTIM_HALFMODE_DISABLED;


HRTIM_TimerInitStructure.StartOnSync = HRTIM_SYNCSTART_DISABLED;


HRTIM_TimerInitStructure.ResetOnSync = HRTIM_SYNCRESET_DISABLED;


HRTIM_TimerInitStructure.DACSynchro = HRTIM_DACSYNC_NONE;


HRTIM_TimerInitStructure.PreloadEnable = HRTIM_PRELOAD_ENABLED;


HRTIM_TimerInitStructure.UpdateGating = HRTIM_UPDATEGATING_INDEPENDENT;


HRTIM_TimerInitStructure.BurstMode = HRTIM_TIMERBURSTMODE_MAINTAINCLOCK;


HRTIM_TimerInitStructure.RepetitionUpdate = HRTIM_UPDATEONREPETITION_ENABLED;


HRTIM_Waveform_Init(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_BaseInitStructure,&HRTIM_TimerInitStructure);




HRTIM_TimerWaveStructure.DeadTimeInsertion=HRTIM_TIMDEADTIMEINSERTION_ENABLED;


HRTIM_TimerWaveStructure.DelayedProtectionMode = HRTIM_TIMDELAYEDPROTECTION_DISABLED;


HRTIM_TimerWaveStructure.FaultEnable = HRTIM_TIMFAULTENABLE_NONE;


HRTIM_TimerWaveStructure.FaultLock = HRTIM_TIMFAULTLOCK_READWRITE;


HRTIM_TimerWaveStructure.PushPull = HRTIM_TIMPUSHPULLMODE_DISABLED;


HRTIM_TimerWaveStructure.ResetTrigger = HRTIM_TIMRESETTRIGGER_NONE;


HRTIM_TimerWaveStructure.ResetUpdate = HRTIM_TIMUPDATEONRESET_DISABLED;


HRTIM_TimerWaveStructure.UpdateTrigger = HRTIM_TIMUPDATETRIGGER_NONE;


HRTIM_WaveformTimerConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_TimerWaveStructure);




HRTIM_TIM_OutputStructure.Polarity=HRTIM_OUTPUTPOLARITY_HIGH;


HRTIM_TIM_OutputStructure.SetSource=HRTIM_OUTPUTSET_TIMPER;


HRTIM_TIM_OutputStructure.ResetSource=HRTIM_OUTPUTRESET_TIMCMP1;


HRTIM_TIM_OutputStructure.IdleMode = HRTIM_OUTPUTIDLEMODE_NONE;


HRTIM_TIM_OutputStructure.IdleState = HRTIM_OUTPUTIDLESTATE_INACTIVE;


HRTIM_TIM_OutputStructure.FaultState = HRTIM_OUTPUTFAULTSTATE_INACTIVE;


HRTIM_TIM_OutputStructure.ChopperModeEnable = HRTIM_OUTPUTCHOPPERMODE_DISABLED;


HRTIM_TIM_OutputStructure.BurstModeEntryDelayed = HRTIM_OUTPUTBURSTMODEENTRY_REGULAR;


HRTIM_WaveformOutputConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,HRTIM_OUTPUT_TD1,&HRTIM_TIM_OutputStructure);


//HRTIM_WaveformOutputConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,HRTIM_OUTPUT_TD2,&HRTIM_TIM_OutputStructure);




HRTIM_CompareStructure.AutoDelayedMode=HRTIM_AUTODELAYEDMODE_REGULAR;


HRTIM_CompareStructure.AutoDelayedTimeout=0x00;


HRTIM_CompareStructure.CompareValue=PERIOD/2;


HRTIM_WaveformCompareConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,HRTIM_COMPAREUNIT_1,&HRTIM_CompareStructure);


HRTIM_DeadtimeStructure.FallingLock=HRTIM_TIMDEADTIME_FALLINGLOCK_READONLY;


HRTIM_DeadtimeStructure.FallingSign=HRTIM_TIMDEADTIME_FALLINGSIGN_POSITIVE;


HRTIM_DeadtimeStructure.FallingSignLock=HRTIM_TIMDEADTIME_FALLINGSIGNLOCK_READONLY;


HRTIM_DeadtimeStructure.FallingValue=0X00;


HRTIM_DeadtimeStructure.RisingLock=HRTIM_TIMDEADTIME_RISINGLOCK_READONLY;


HRTIM_DeadtimeStructure.RisingSign=HRTIM_TIMDEADTIME_RISINGSIGN_POSITIVE;


HRTIM_DeadtimeStructure.RisingSignLock=HRTIM_TIMDEADTIME_RISINGSIGNLOCK_READONLY;


HRTIM_DeadtimeStructure.RisingValue=0X00;


HRTIM_DeadTimeConfig(HRTIM1,HRTIM_TIMERINDEX_TIMER_D,&HRTIM_DeadtimeStructure);




HRTIM_WaveformOutputStart(HRTIM1,HRTIM_OUTPUT_TD1);


HRTIM_WaveformOutputStart(HRTIM1,HRTIM_OUTPUT_TD2);


HRTIM_WaveformCounterStart(HRTIM1,HRTIM_TIMERID_TIMER_D);


}


推荐阅读

史海拾趣

EBK Kruger GmbH & Co KG公司的发展小趣事

面对数字化浪潮的挑战,EBK Kruger积极拥抱数字化转型。公司引入了先进的ERP系统和智能制造技术,提高了生产效率和产品质量。同时,EBK Kruger还加强了对大数据和人工智能技术的研发和应用,为客户提供了更加智能化和个性化的产品和服务。通过数字化转型的推动,EBK Kruger在激烈的市场竞争中保持了领先地位。

地博电子(DIBO)公司的发展小趣事

为了进一步拓展市场,地博电子在2016年成立了湖南地博光学材料有限公司,并建立了覆盖全国的营销网络。这一举措使得地博电子的产品能够更快速地触达目标客户,提高了市场占有率和品牌影响力。同时,全国营销网络的建立也为地博电子的未来发展提供了更广阔的空间。

Coiltronics公司的发展小趣事

在电子行业中,产品质量是企业生存的关键。Coiltronics公司深知这一点,因此在生产过程中始终坚持严格的质量管理。公司引进先进的生产设备和技术,建立完善的质量检测体系,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使得Coiltronics的产品在市场上赢得了良好的口碑,吸引了大量忠实客户。

Dolphin Interconnect Solutions Asa公司的发展小趣事

在全球化的背景下,Dolphin Interconnect Solutions ASA积极实施国际化战略。公司不仅在欧美等发达国家建立了完善的销售网络,还通过参加国际展会、举办技术研讨会等方式,提高了品牌知名度和市场影响力。同时,Dolphin还加强了与国际知名企业的合作,共同推动电子行业的发展。

Acme Electric Corporation公司的发展小趣事

在全球化的背景下,Dolphin Interconnect Solutions ASA积极实施国际化战略。公司不仅在欧美等发达国家建立了完善的销售网络,还通过参加国际展会、举办技术研讨会等方式,提高了品牌知名度和市场影响力。同时,Dolphin还加强了与国际知名企业的合作,共同推动电子行业的发展。

Abilis Systems公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Dolphin Interconnect Solutions ASA面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加大在人工智能、物联网等新兴领域的投入。同时,Dolphin还加强了与产业链上下游企业的合作,共同推动产业链的转型升级。这些努力使得Dolphin在激烈的市场竞争中保持了稳健的发展态势。

问答坊 | AI 解惑

十万火急——关于次声波检测

请高手帮忙想想怎么设计一个次声波检测系统? 我看过很多相关资料,但是还是无从下手。 另外,请高手指点一下,在哪里能够买得到电容式次声传声器?…

查看全部问答>

苦恼,初次接触VxWorks

我原来是搞VC开发的,现在因为公司需要,改搞VxWorks。但是公司没有人懂VxWorks。我原来也搞过一些单片机的开发。对VxWorks也是一知半解。 现在要做项目,不知道如何下手。现在向各位大牛们请教,如何做VxWorks开发,能提供网站、Domo、软件均可。 ...…

查看全部问答>

PLC对输入信号的脉冲频率及宽度是否有要求?为什么?

请问高手,PLC对输入信号的脉冲频率及宽度是否有要求?为什么?我是初学者。。。。。…

查看全部问答>

真诚请教大家:大家现在进行嵌入式开发,用的那些芯片?希望大家能多说一点项目里用到的芯片,楼主诚心请教,并且肯定放分!

我看得大部分材料说的都是51的片子,如果直接去学arm,没有项目的支持学起来很费劲。 所以想咨询一下大家。…

查看全部问答>

关于arm的开发工具ads?

学习arm的时候使用的是ads,最近想开发点东西,但是不清楚ads是不是免费使用的,是不是要出钱买才可以开发正规的产品呢? 谁有这方面的经验请谈一下!…

查看全部问答>

开关

帮忙!寻找电子工程师,1路无线电遥控开关,急做!…

查看全部问答>

有没有办法实现stm32的屏蔽io输出

                                 在用流明的单片机的时候知道的这个功能,就是并口输出某些数据,可以利用屏蔽寄存器防止某些位改变。打个比方 输出 ...…

查看全部问答>

51单片机的8255A IO口扩展

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 8255A IO口扩展  …

查看全部问答>

关于外部计数问题

谢谢大家热心帮助,搞定了 还是我程序问题  哎~~ 新人 问题多啊 [ 本帖最后由 yuanyx99 于 2011-12-20 14:23 编辑 ]…

查看全部问答>

VxWorks启动问题

大家好,我最近一直vxworks,利用Bootrom通过网络加载VxWorks镜像,基于Pentium的BSP包,移植到AMD LX800的主板上,加载完后提示:vxworks:i8255x(0): Invalid EEPROM checksum 0x54a9启动VxWorks不完全,不能出现“->”,不能执行任何命令,希望 ...…

查看全部问答>