90 lines
2.5 KiB
C
90 lines
2.5 KiB
C
/**
|
|
* @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"
|
|
|
|
#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
|
|
|
|
// 后续还要添加更多的参数,以提供更直观的封装,比如直接按照百分比设置占空比,直接设置频率等
|
|
// ...
|
|
} PWMInstance;
|
|
|
|
typedef struct
|
|
{
|
|
TIM_HandleTypeDef *htim; // TIM句柄
|
|
uint32_t channel; // 通道
|
|
uint32_t period; // 周期
|
|
uint32_t pulse; // 脉宽
|
|
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);
|
|
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
|