ESP8266的PWM和硬件定时器都是使用同一个中断定时器,所以同时只能使用一个,这点要注意

1、PWM的初始化

void pwm_init(
uint32 period,
uint8 *duty,
uint32 pwm_channel_num,
uint32 (*pin_info_list)[3])
参数:
uint32 period : PWM 周期;
uint8 *duty : 各路 PWM 的占空⽐比
uint32 pwm_channel_num: PWM 通道数
uint32 (*pin_info_list)[3]: PWM 各通道的 GPIO 硬件参数。本参数是⼀一个 n * 3

uint32 pwm_duty[3]= {0};
uint32 io_info[3][3]={
{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12,12},
{PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13},
{PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15,15}
};
//pwm_init(1000,pwm_duty,3,io_info);
pwm_init(1000, //设置pwm的周期
pwm_duty, //设置pwm的占空比
3, //pwm的通道数
io_info); //pwM的管脚

通过上面就设置好了GPIO12、GPIO13、GPIO15为PWM输出

2、使用软定时器的回调函数来改变占空比

os_timer_disarm(&pwm_timer);
os_timer_setfn(&pwm_timer,(os_timer_func_t *)pwm_callback,NULL);
os_timer_arm(&pwm_timer,100,0);

void pwm_set_duty(uint32 duty, uint8 channel) 这个函数就是用来改变占空比的,duty为改变占空比 channel为哪一个通道

uint32 duty : 设置⾼高电平时间参数,占空⽐比的值为 (duty*45)/ (period*1000)

uint8 channel : 当前要设置的 PWM 通道,取值范围依据实际使⽤用了⼏几路 PWM,

每次更新 PWM 设置后,都需要重新调用void pwm_start (void)函数才能生效

void  pwm_callback(void)
{
static unsigned int duty = 0;

if(duty > 20000)
{
duty = 0;
}
duty = duty+ 200;

pwm_set_duty(duty,0);
pwm_set_duty(20000-duty,1);
pwm_set_duty(duty,2);
pwm_start();
os_timer_arm(&pwm_timer,100,0);
}

这样GPIO12、GPIO15、GPIO13就可以输出可变的PWM

ESP8266-SDK的3路PWM输出相关推荐

  1. 树莓派控制16路PWM输出的PCA9685模块

    树莓派控制16路PWM输出的PCA9685模块 1.PCA9685 1.1简介 采用I2C通信,内置了PWM驱动器和一个时钟,不需要不断发送信号占用单片机资源 支持16路PWM输出,每路12位分辨率( ...

  2. 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码

    树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码 文章目录 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码 一. Servo Driver ...

  3. 集成两路MAX1169的STC8G1K08模块,带有两路PWM输出

    ■ 设计背景 在 集成有MAX1169,MAX520的DAAC单片STC8G1K08机电路板 中设计了集成有MAX1169的ADDA模块,对于一些需要使用PWM驱动的实验,这款模块还无法进行集成实验. ...

  4. 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护

    1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...

  5. 12. GD32F103C8T6入门教程-定时器-3路pwm输出

    1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...

  6. STM32f103,TIM1,TIM2,TIM3,TIM4,TIM5,TIM8,4路PWM输出配置(保姆级)

    没什么可说的,想说的都写在注释里了,重要的事情说三遍:看注释,看注释,看注释 定时器的.c文件: /************************************************** ...

  7. DI计数器Modbus TCP协议2路PWM输出WiFi模块

    产品特点: ● 3路开关量输入,2路开关量输出 ● DI每一路都可用作计数器或者频率测量 ● DO每一路都可独立输出PWM信号 ● 支持Modbus TCP 通讯协议 ● 内置网页功能,可以通过网页查 ...

  8. 3路DI计数器,2路PWM输出,Modbus TCP协议,WiFi模块WJ165

    产品特点: ●  3路开关量输入,2路开关量输出 ●  DI每一路都可用作计数器或者频率测量 ●  DO每一路都可独立输出PWM信号 ● 支持Modbus TCP 通讯协议 ● 内置网页功能,可以通过 ...

  9. STM8L051F3P6TR 定时器2两路PWM输出+死区控制+端口重映射PC5PC6

    使用定时器2的通道1.2输出PWM CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//打开串口时钟源TIM2_DeInit();TIM2_ ...

最新文章

  1. 一:搭建一套免费的serverless网站
  2. Linux 多网卡bond
  3. linux操作系统下部署Javaweb项目教程
  4. sed命令 linux下的超强查找和替换命令
  5. Mybatis一对一和一对多配置
  6. 决策树以及XGBoost如何画出 树分裂图?
  7. Exchange Server 2013部署系列之三:部署邮箱服务器角色
  8. nginx编译和调试
  9. nRF52840学习-初识1-1
  10. ajax传参的3种形式
  11. 程序员夏天穿格子衫,那么冬天穿什么?
  12. Python深度学习-第一章、什么是深度学习
  13. 智能手机 + 机器学习 = 个人终端的未来
  14. 利用高斯(Guass)算法求解2维的SVP向量
  15. php后端必学layui框架速搭网站后台
  16. Latex 绘制函数图像
  17. 性能测试:深入理解并发量,线程数,吞吐量,TPS
  18. 职业规划与发展部_3D成像原理
  19. 白加黑加载方式_“白加黑减”即曝光补偿的应用方法及原理全面详解——致新手新新手...
  20. 同人女,我想对你说——黄金圣斗士对同人女的真情告白

热门文章

  1. TIS教程03-导出
  2. Kong API网关使用笔记
  3. 注册测绘师学习笔记(五)
  4. uni-app day02
  5. 如何在没有流量的情况下做微信直播呢?答案是建立社群
  6. loj 2495. 「AHOI / HNOI2018」转盘
  7. The method xxx of type xxx must override a superclass method
  8. flask 产生KeyError:‘migrate‘报错
  9. 解决mac excel中文乱码的问题
  10. java区分登陆者的设备(手机还是电脑)