sentry_chassis_hzz/bsp/pwm/bsp_pwm.h

90 lines
2.5 KiB
C
Raw Normal View History

/**
* @file bsp_pwm.h
* @author your name (you@domain.com)
* @brief
* @version 0.1
* @date 2023-02-14
* @todo ,module修改tim的分频器和自动重装载寄存器?
*
* @copyright Copyright (c) 2023
*
*/
#ifndef BSP_PWM_H
#define BSP_PWM_H
#include "tim.h"
#include "stdint.h"
2023-01-01 17:32:22 +08:00
#define PWM_DEVICE_CNT 16 // 最大支持的PWM实例数量
/* pwm实例结构体 */
typedef struct pwm_ins_temp
{
TIM_HandleTypeDef *htim; // TIM句柄
uint32_t channel; // 通道
uint32_t period; // 周期
uint32_t pulse; // 脉宽
void (*callback)(struct pwm_ins_temp *); // DMA传输完成回调函数
void *id; // 实例ID
2023-01-01 17:32:22 +08:00
// 后续还要添加更多的参数,以提供更直观的封装,比如直接按照百分比设置占空比,直接设置频率等
// ...
} PWMInstance;
typedef struct
{
TIM_HandleTypeDef *htim; // TIM句柄
uint32_t channel; // 通道
uint32_t period; // 周期
uint32_t pulse; // 脉宽
2023-02-14 11:05:41 +08:00
void (*callback)(PWMInstance*); // DMA传输完成回调函数
void *id; // 实例ID
} PWM_Init_Config_s;
/**
* @brief pwm实例
*
* @param config
* @return PWMInstance*
*/
PWMInstance *PWMRegister(PWM_Init_Config_s *config);
/**
* @brief pwm
*
* @param pwm pwm实例
*/
void PWMStart(PWMInstance *pwm);
/**
* @brief pwm
*
* @param pwm pwm实例
*/
void PWMStop(PWMInstance *pwm);
// @todo 这三个函数还需要进一步封装,务必协调好三者之间的关系
/**
* @brief pwm脉宽
*
* @param pwm pwm实例
* @param pulse
*/
void PWMSetPulse(PWMInstance *pwm, uint32_t pulse);
2023-01-01 17:32:22 +08:00
void PWMSetPeriod(PWMInstance *pwm, uint32_t period); // 未实现
void PWMSetPrescaler(PWMInstance *pwm, uint32_t prescaler); // 未实现
/**
* @brief pwm dma传输
*
* @param pwm pwm实例
* @param pData ,CubeMX配置的DMA传输位数()
* @param Size
* @note 使,CubeMX中配置DMA传输位数为对应位数
* :使16,DMA传输位数为16位(half word),
*/
void PWMStartDMA(PWMInstance *pwm, uint32_t *pData, uint32_t Size);
#endif // BSP_PWM_H