硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4119|回复: 2
收起左侧

[HAL学习笔记] HAL库源文件stm32h7xx_hal_lptim.c学习笔记,适合在低功耗场合,像超时,单次模式也实用(2018-08-13 V1.0)

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2018-8-13 00:09:32 | 显示全部楼层 |阅读模式
说明:
1、主要是LPTIM的6种工作模式学习。



==============================================================================
                                                                  ##### 如何使用此驱动  #####
==============================================================================  

1、低功耗定时器的底层配置是通过函数HAL_LPTIM_MspInit()实现
(1)使用函数__HAL_RCC_LPTIMx_CLK_ENABLE()使能定时器时钟。
(2)如果调用函数HAL_LPTIM_PWM_Start_IT()使能了中断,需要调用HAL_NVIC_SetPriority()设置中断优先级,调用函数HAL_NVIC_EnableIRQ()使能中断,在中断服务程序里面调用 HAL_LPTIM_IRQHandler。

2、通过函数HAL_LPTIM_Init()做初始化,主要配置的内容如下:
(1)支持LPTIM1和LPTIM2的配置(官方手册给出的说明是有5个定时器的,程序里面不知为何注释只有LPTIM1和LPTIM2的初始化)
(2)定时器的时钟源可以选择ULPTIM input (IN1),APB, LSE, LSI 或者 HSI,且可以设置分频。
(3)超低功耗时钟UltraLowPowerClock需要选择ULPTIM,同时配置时钟极性和采样时间。
(4)触发器:计数器如何启动。
                  (a)来源:触发器可以是软件或其中一个硬件触发器。
                  (b)ActiveEdge:仅用于硬件触发。
                  (c)SampleTime:触发采样时间以配置触发器毛刺滤波器。

(5)输出极性:有两种相反的极性可选。
(6)更新模式:指定是否立即更新自动加载值和比较值,立即完成或在当前结束后完成 期。
(7)Input1Source:GPIO 或 比较器输出。
        Input2Source:GPIO 或 比较器输出,由于Input2仅能用于编码器功能,因此Input2只能用于LPTIM1(这个待考证)

3、6种工作模式
(1)PWM模式:
        启动此模式可调用HAL_LPTIM_PWM_Start()或 HAL_LPTIM_PWM_Start_IT()用于中断模式。
         
(2)单脉冲模式:
        启动此模式可调用HAL_LPTIM_OnePulse_Start()或HAL_LPTIM_OnePulse_Start_IT()用于中断模式。
         
(3)单次模式:
        在此模式下,当满足匹配条件时,输出可以切换高低电平(从如果输出极性配置为高,则为低电平至高电平,反之亦然)
        启动此模式可可调用HAL_LPTIM_SetOnce_Start()或 HAL_LPTIM_SetOnce_Start_IT()用于中断模式。
         
(4)编码器模式:
        启动此模式可调用HAL_LPTIM_Encoder_Start()或HAL_LPTIM_Encoder_Start_IT()中断模式。仅适用于LPTIM1(待考证)。
         
(5)超时模式:
        有效的边沿触发输入可复位定时器。第一个触发事件将启动计时器,任何连续触发事件将重置计数器并重新开始。
        启动此模式可可调用HAL_LPTIM_TimeOut_Start()或 HAL_LPTIM_TimeOut_Start_IT()用于中断模式。
         
(6)计数器模式:
        计数器可用于计算来自Input1的外部事件或用于计算内部时钟周期。
        启动此模式可调用HAL_LPTIM_Counter_Start()或  HAL_LPTIM_Counter_Start_IT()用于中断模式。

4、用户可以通过调用相应的API来停止任何模式: HAL_LPTIM_Xxx_Stop 或 HAL_LPTIM_Xxx_Stop_IT(如果此模式已经在中断模式下启动)。

5、函数HAL_LPTIM_DeInit()用来复位定时器配置。


初始化和复位初始化
HAL_StatusTypeDef HAL_LPTIM_Init(LPTIM_HandleTypeDef *hlptim);
HAL_StatusTypeDef HAL_LPTIM_DeInit(LPTIM_HandleTypeDef *hlptim);

底层初始化API接口函数
void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_MspDeInit(LPTIM_HandleTypeDef *hlptim);


PWM模式
HAL_StatusTypeDef HAL_LPTIM_PWM_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse);
HAL_StatusTypeDef HAL_LPTIM_PWM_Stop(LPTIM_HandleTypeDef *hlptim);

HAL_StatusTypeDef HAL_LPTIM_PWM_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse);
HAL_StatusTypeDef HAL_LPTIM_PWM_Stop_IT(LPTIM_HandleTypeDef *hlptim);



单脉冲模式
HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse);
HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop(LPTIM_HandleTypeDef *hlptim);

HAL_StatusTypeDef HAL_LPTIM_OnePulse_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse);
HAL_StatusTypeDef HAL_LPTIM_OnePulse_Stop_IT(LPTIM_HandleTypeDef *hlptim);


单次模式
HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse);
HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop(LPTIM_HandleTypeDef *hlptim);

HAL_StatusTypeDef HAL_LPTIM_SetOnce_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Pulse);
HAL_StatusTypeDef HAL_LPTIM_SetOnce_Stop_IT(LPTIM_HandleTypeDef *hlptim);


编码器模式
HAL_StatusTypeDef HAL_LPTIM_Encoder_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period);
HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop(LPTIM_HandleTypeDef *hlptim);

HAL_StatusTypeDef HAL_LPTIM_Encoder_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period);
HAL_StatusTypeDef HAL_LPTIM_Encoder_Stop_IT(LPTIM_HandleTypeDef *hlptim);


超时模式
HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Timeout);
HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop(LPTIM_HandleTypeDef *hlptim);

HAL_StatusTypeDef HAL_LPTIM_TimeOut_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period, uint32_t Timeout);
HAL_StatusTypeDef HAL_LPTIM_TimeOut_Stop_IT(LPTIM_HandleTypeDef *hlptim);


计数器模式
HAL_StatusTypeDef HAL_LPTIM_Counter_Start(LPTIM_HandleTypeDef *hlptim, uint32_t Period);
HAL_StatusTypeDef HAL_LPTIM_Counter_Stop(LPTIM_HandleTypeDef *hlptim);

HAL_StatusTypeDef HAL_LPTIM_Counter_Start_IT(LPTIM_HandleTypeDef *hlptim, uint32_t Period);
HAL_StatusTypeDef HAL_LPTIM_Counter_Stop_IT(LPTIM_HandleTypeDef *hlptim);



读操作
uint32_t HAL_LPTIM_ReadCounter(LPTIM_HandleTypeDef *hlptim);
uint32_t HAL_LPTIM_ReadAutoReload(LPTIM_HandleTypeDef *hlptim);
uint32_t HAL_LPTIM_ReadCompare(LPTIM_HandleTypeDef *hlptim);

LPTIM中断
void HAL_LPTIM_IRQHandler(LPTIM_HandleTypeDef *hlptim);

回调函数
void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_TriggerCallback(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_CompareWriteCallback(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_AutoReloadWriteCallback(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_DirectionUpCallback(LPTIM_HandleTypeDef *hlptim);
void HAL_LPTIM_DirectionDownCallback(LPTIM_HandleTypeDef *hlptim);

定时器状态获取
HAL_LPTIM_StateTypeDef HAL_LPTIM_GetState(LPTIM_HandleTypeDef *hlptim);


回复

使用道具 举报

1

主题

34

回帖

37

积分

新手上路

积分
37
发表于 2018-8-13 11:02:36 | 显示全部楼层
楼主辛苦了,学习一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
 楼主| 发表于 2019-1-2 16:19:44 | 显示全部楼层
更下中间介绍部分:

QQ截图20190102161803.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-6 00:25 , Processed in 0.166902 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表