历史上的今天
返回首页

历史上的今天

今天是:2024年12月23日(星期一)

正在发生

2021年12月23日 | STM32基本定时器 HAL库

2021-12-23 来源:eefocus

1.定时器分类

STM32F1系列中,除了互联型的产品,共有8个定时器,分为基本定时器、通用定时器和高级定时器。


基本定时器是一个16位只能向上计数的定时器,只能定时,没有外部IO。


通用定时器是一个16位可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部IO。


高级定时器是一个16位可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有8个外部IO。

2.基本定时器功能框图

时钟源:定时器时钟TIMxCLK(内部时钟CK_INT),是经APB1预分频器后分频提供,APB1预分频系数为1,则频率不变,否则*2;

计数器时钟:定时器时钟经过PSC预分频器后,得到CK_CNT用来驱动计数器计数,PSC是一个16位的预分频器,所以CK_CNT=TIMxCLK/(PSC+1);

计数器:计数器CNT是一个16位的计数器,只能向上计数,最大计数值65535,。CNT计数达到自动重装载寄存器的时候产生更新时间,并清零从头计数;

自动重装载寄存器(ARR):ARR是一个16位的寄存器,定义着CNT能够计数的最大值

3.定时器初始化结构体

STM32f1系列单片机的HAL库,定义了4个定时器相关的初始化结构体,基本定时器只用到其中的TIM_TimeBaseInitTypeDef


typedef struct {

    uint32_t Prescaler; // 预分频器

    uint32_t CounterMode; // 计数模式

    uint32_t Period; // 定时器周期

    uint32_t ClockDivision; // 时钟分频

    uint32_t RepetitionCounter; // 重复计算器

} TIM_TimeBaseInitTypeDef;

Prescaler:设置TIMx_PSC寄存器的值,设置范围0~65535;

CounterMode:定时器计数方式,可设置为向上计数、向下计数以及三种中心对其模式。基本定时器只能向上计数,所以该参数无需设置;

Period:定时器周期,设置ARR的值;

ClockDivision:时钟分频,设置定时器时钟CK_INT频率与数字滤波器采样时钟频率比,基本定时器无此功能;

RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,可以控制输出PWM个数;

4.编程要点

宏定义

// 定义定时器预分频,定时器实际时钟频率为:72MHz/(BASIC_TIMx_PRESCALER+1)

#define BASIC_TIMx_PRESCALER           71 

// 定义定时器周期,当定时器开始计数到BASIC_TIMx_PERIOD值是更新定时器并生成对应事件和中断

#define BASIC_TIMx_PERIOD              1000 

 

#define BASIC_TIMx                     TIM6

#define BASIC_TIM_RCC_CLK_ENABLE()     __HAL_RCC_TIM6_CLK_ENABLE()

#define BASIC_TIM_RCC_CLK_DISABLE()    __HAL_RCC_TIM6_CLK_DISABLE()

#define BASIC_TIM_IRQ                  TIM6_IRQn

#define BASIC_TIM_INT_FUN              TIM6_IRQHandler

基本定时器初始化

void BASIC_TIMx_Init(void)

{

TIM_MasterConfigTypeDef sMasterConfig;

 

htimx.Instance = BASIC_TIMx;

htimx.Init.Prescaler = BASIC_TIMx_PRESCALER;

htimx.Init.Period = BASIC_TIMx_PERIOD;

HAL_TIM_Base_Init(&htimx);

 

    // 主/从和输出触发选择

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

HAL_TIMEx_MasterConfigSynchronization(&htimx, &sMasterConfig);

}

优先级配置

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)

{

   /* 基本定时器外设时钟使能 */

    BASIC_TIM_RCC_CLK_ENABLE();

 

    /* 外设中断配置 */

    HAL_NVIC_SetPriority(BASIC_TIM_IRQ, 1, 0);

    HAL_NVIC_EnableIRQ(BASIC_TIM_IRQ);

 

}

中断服务函数

extern TIM_HandleTypeDef htimx;

/**

* @brief This function handles TIM6 global interrupt.

*/

void BASIC_TIM_INT_FUN(void)

{

  HAL_TIM_IRQHandler(&htimx);

}

 

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  time++;

}

推荐阅读

史海拾趣

Coleman Cable Inc公司的发展小趣事

随着全球环保意识的不断提高,Coleman Cable积极响应绿色发展的号召,将环保理念融入公司的生产和经营中。公司研发出环保型电缆产品,采用环保材料和工艺,减少生产过程中的环境污染。同时,公司还加强废弃电缆的回收和处理工作,推动资源的循环利用,为行业的绿色发展做出了贡献。

Advanced Energy公司的发展小趣事

随着公司的不断发展壮大,AE公司于某一时期成功在纳斯达克上市。这一里程碑事件标志着AE公司在电子行业的地位得到了进一步的巩固和提升。上市为公司带来了更多的资金支持,使得AE公司能够加大在研发、生产、销售等方面的投入,进一步提升了公司的竞争力。同时,上市也增强了公司的品牌影响力,吸引了更多的合作伙伴和客户。

意华(CZT)公司的发展小趣事

自1995年成立以来,意华(CZT)始终秉持“诚信”的合作态度和“创新”的发展思路。在公司初创阶段,面对激烈的市场竞争,意华坚持高质量的产品和服务,赢得了客户的信赖。同时,公司不断投入研发,推出了一系列具有创新性的电子产品和连接器,迅速在市场上树立了良好的口碑。

CYMBET公司的发展小趣事

随着EnerChip技术的不断完善和市场的认可,CYMBET公司开始积极拓展市场,与全球各地的合作伙伴建立了紧密的合作关系。例如,CYMBET与Digi-Key Corporation签订了全球经销协议,通过Digi-Key的广泛分销网络,EnerChip系列固态可充电薄膜电池及能量采集储能模块得以迅速进入全球市场。此外,CYMBET还与多家知名电子设备制造商建立了长期合作关系,共同开发新产品,推动电子行业的发展。

FASTRAX公司的发展小趣事

在成立初期,FASTRAX就注重技术创新,不断推出新的产品和技术方案。其中,Fastrax iSuite MP SDK软件开发系统是其技术创新的代表,该系统为编程人员提供了丰富的资源,大大简化了GPS接收模块的开发过程。这一创新不仅提升了FASTRAX产品的竞争力,也推动了整个电子行业的发展。

Design Gateway公司的发展小趣事

随着Gateway业务的不断发展,公司开始寻求更多的市场曝光。1987年,Gateway在《Computer Shopper》杂志上投放了一版独特的广告,吸引了众多消费者的目光。1991年,公司推出了彰显其牧场起家背景的别具一格的奶牛花斑盒状商标,这一创新举措获得了全国消费者的认可,进一步提升了Gateway的品牌知名度和市场地位。

(请注意,由于篇幅限制,以上两个故事为简化版。在实际写作中,可以进一步扩展每个故事,包括更详细的背景信息、人物对话、市场反应等。)

由于篇幅所限,这里只提供了两个故事概要。如果需要更多关于Gateway或其他电子公司的发展故事,可以进一步研究和撰写。

问答坊 | AI 解惑

怎样设置系统进入Suspend状态?

各位大虾好, 我最近需要编程让系统进入UserIdle,SystemIdle和Suspend状态。 我的做法是: 1, 分别设置useridle, systemidle, suspend 的timeout时间 2, 将获取到的时间(以秒为单位)写到注册表HKEY_LOCAL_MACHINE\\\\System\\\\CurrentC ...…

查看全部问答>

windows mobile项目外外包

现在有一个WM的项目外包,是关于google map开发的,有意者QQ联系。 QQ:14683297 我在上海,最好在上海或者附近的。…

查看全部问答>

求助:Local ROM 和 NOR Flash 是什么意思啊?谢谢!

请教: 我在书上看到 Local ROM NOR Flash 问题1: Local ROM 是不是相当于电脑的 内存条? NOR Flash 是不是相当于电脑的 硬盘? 问题1: Local ROM 是什么? 还有别的 ROM 吗? ROM 的主要作用是什么? 问题2: NOR Flash 是什么 ...…

查看全部问答>

彩信接收问题

在做手机上的彩信软件,彩信打包,发送的问题解决了, 现在差彩信接收的问题搞不定,彩信中心给手机发彩信 先给手机发一条带有彩信URL的短信通知,手机再根据 URL去下载彩信,这个URL我取不到,要短信那边配合, 谁有彩信接收的代码,给我发一份,可 ...…

查看全部问答>

10.07【每周讨论】ubuntu软件安装问题

ubuntu不能使用sudo apt-get install安装软件,该怎么办? apt-get install安装的软件的位置在哪?…

查看全部问答>

三极管放大电路中的电解电容

  在这个三极管放大电路中电解电容的极性为什么这样放置 …

查看全部问答>

开关电源设计要注意的几点!(转)

1,开关电源的占空比     初学者总是不明白占空比跟输入电压输出电压的关系。以buck型为例,因为Vout=D*Vin,所以会有人考虑怎么根据输入电压和输出电压改变占空比。这个问题让我很难回答。     占空比是变化的,但不是根据 ...…

查看全部问答>

ADS1.2

ADS1.2能不能再win7下运行 …

查看全部问答>