luat_pwm.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef Luat_PWM_H
  2. #define Luat_PWM_H
  3. #include "luat_base.h"
  4. /**
  5. * @defgroup luatos_device_PWM PWM接口
  6. * @{
  7. */
  8. /**
  9. * @brief PWM控制参数
  10. */
  11. typedef struct luat_pwm_conf {
  12. int channel; /**<PWM通道 可选通道为 0 / 1 / 2 / 4 总计4个通道*/
  13. int stop_level;
  14. size_t period;/**<频率, 1Hz - 13MHz*/
  15. size_t pulse; /**<占空比,0-100 如将pulse设为50时输出高电平时间占周期50%时间 */
  16. size_t pnum; /**<输出周期 0为持续输出, 1为单次输出, 其他为指定脉冲数输出*/
  17. size_t precision;/**<分频精度, 100/256/1000, 默认为100, 若设备不支持会有日志提示*/
  18. uint8_t reverse;
  19. } luat_pwm_conf_t;
  20. #ifdef __LUATOS__
  21. #else
  22. /**
  23. * @brief 设置PWM输出完成回调,只有open时,pnum不为0才有回调,必须在pwm open前设置
  24. * @param channel: 选择pwm通道 可选通道为 0 / 1 / 2 / 4 总计4个通道
  25. * callback :回调函数
  26. * param :回调时用户参数
  27. * @return int
  28. */
  29. int luat_pwm_set_callback(int channel, CBFuncEx_t callback, void *param);
  30. #endif
  31. /**
  32. * @brief 打开pwm 通道
  33. *
  34. * @param channel: 选择PWM通道 可选通道为 0 / 1 / 2 / 4 总计4个通道
  35. * period : 设置产生的PWM频率
  36. * pulse : 设置产生的PWM占空比,单位0.1%
  37. * pnum :设置产生的PWM个数,若pnum设为0将一直输出PWM
  38. * @return int
  39. * 返回值为 0 : 配置PWM成功
  40. * 返回值为 -1: PWM通道选择错误
  41. * 返回值为 -2: PWM频率设置错误
  42. * 返回值为 -3:PWM占空比设置错误
  43. * 返回值为 -4: 该PWM通道已被使用
  44. */
  45. int luat_pwm_open(int channel, size_t period, size_t pulse, int pnum);
  46. /**
  47. * @brief 配置pwm 参数
  48. *
  49. * @param conf->channel: 选择PWM通道 可选通道为 0 / 1 / 2 / 4 总计4个通道
  50. * conf->period : 设置产生的PWM频率
  51. * conf->pulse : 设置产生的PWM占空比
  52. * conf->pnum : 设置产生的PWM个数,若pnum设为0将一直输出PWM
  53. * @return int
  54. * 返回值为 0 : 配置PWM成功
  55. * 返回值为 -1: PWM通道选择错误
  56. * 返回值为 -2: PWM频率设置错误
  57. * 返回值为 -3:PWM占空比设置错误
  58. * 返回值为 -4: 该PWM通道已被使用
  59. */
  60. int luat_pwm_setup(luat_pwm_conf_t* conf);
  61. /**
  62. * @brief 获取pwm 频率 本功能暂未实现
  63. *
  64. * @param id i2c_id
  65. * @return int
  66. */
  67. int luat_pwm_capture(int channel,int freq);
  68. /**
  69. * @brief 关闭pwm 接口
  70. *
  71. * @param channel: 选择PWM通道 可选通道为 0 / 1 / 2 / 4 总计4个通道
  72. * @return int
  73. */
  74. int luat_pwm_close(int channel);
  75. /**
  76. * @brief 修改占空比
  77. * @param channel: 选择pwm通道 可选通道为 0 / 1 / 2 / 4 总计4个通道
  78. * pulse :修改pwm占空比值
  79. * @return int
  80. */
  81. int luat_pwm_update_dutycycle(int channel, size_t pulse);
  82. /** @}*/
  83. #endif