5、定时器模块

1、定时器模块

定时器模块相对而言比较简单,主要分为三部分。
第一部分是整个系统的时基systick内核定时器,里面主要放置了LVGL,RTT,HAL库的时间基准函数。
第二部分就是屏幕的背光部分,使用的是TIM3_CH2通道。
第三部分是RTC时钟及其后备域。

第一部分由于比较简单,就不多说了。

2、PWM部分

下面是TIM3_CH2的初始化。
在这里插入图片描述
因为我这里使用的系统主频是84Mhz,PWM频率设定是1Khz,所以分频系数为83,计数值为999.正好是1KHZ的PWM。

2.1、定时器开始函数

整个PWM在HAL库里面的使用都很简单,在CUBEMX生成的定时器初始化函数后面调用HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2); __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 500);这两个函数即可。

参数500的意思是TIM3->CCR2寄存器值为500,因为硬件初始化的时候已经将TIM3->CR1的值设置为999了。所以初始化占空比为500/(999+1) = %50.

2.2、设定背光函数

这里简单的对HAL库的库函数做了一个封装,因为是移植的UP的代码,所以基本和他的一模一样。

#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
#define __LimitValue(x,min,max) ((x)=constrain((x),(min),(max)))
void backlight_set_value(int16_t _val)
{
    __LimitValue(_val, 0, 1000);
    __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,_val);
}

这个宏的作用就是将参数_val参数的范围限定在0-1000

2.3、获取背光亮度
uint16_t backlight_get_value()
{
    return __HAL_TIM_GetCompare(&htim3,TIM_CHANNEL_2);
}
3、RTC时钟部分

F411的RTC支持如下中断

  • 闹钟中断
  • 唤醒中断
  • 时间戳中断
  • 入侵检测中断

我使用了闹钟中断和唤醒中断,分别用于用户闹钟设定和设备低功耗。

目前这一部分还没完成,需要等到界面完成后才能具体做出实现代码。
暂时先空着,后面过来记录下来。

4、备注

计算TIMER生成PWM频率的时候切记注意定时器的时钟频率,不然得到的频率是错误的。
这里说一个小方法,使用CUBEMX生成工程后,会有一个系统生成TIMER的初始化函数,如下所示。
在这里插入图片描述
找到箭头指向的地方,会发现如下宏定义

#define __HAL_RCC_TIM3_CLK_ENABLE()     do { \
                                        __IO uint32_t tmpreg = 0x00U; \
                                        SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\
                                        /* Delay after an RCC peripheral clock enabling */ \
                                        tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);\
                                        UNUSED(tmpreg); \
                                        } while(0U)

这就能很清晰的看到TIM3时钟是挂载到APB1时钟总线上的。然后结合CUBEMX软件,如下
在这里插入图片描述就能知道你使用的定时器时钟频率了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值