ESP8266 PWM&GPIO
程序员文章站
2024-03-22 22:04:52
...
这是一个关于ESP8266 PWM一路输出的例子,输出引脚为GPIO2,这个管脚与UART1有冲突,可以到art_config(uint8 uart_no)这个函数里关掉PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);也可以换个脚位。
#include "gpio.h"
#include "pwm.h"
这是定义的全局变量
ETSTimer pwmTimer;//定时器 pwm
uint32 pwm_duty_init[1]={0};//对应管脚的输出占空比
uint32 pwm_info[1][3]={{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO2,2}};//设置pwm输出管脚
这是PWM输出函数,使用定时器回调的方式调用这个函数void ICACHE_FLASH_ATTR
pwm_put(void *arg)//pwm输出
{
static int32 duty = 0;//pwm占空比
static bool fla = 0;
if(fla){
duty-=50;
pwm_set_duty(duty,0);
pwm_start();
}else{
duty+=50;
pwm_set_duty(duty,0);
pwm_start();
}
if(duty>=5000) fla = 1;
if(duty<=0) fla = 0;
}
这是ESP8266系统初始化完成后的回调函数void ICACHE_FLASH_ATTR
sys_init_cb(void)//系统初始化完成后回调函数
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0);//设置输出模式
gpio_output_set(0,BIT0,BIT0,0);//gpio0输出低电平
// gpio_output_set(BIT0,0,BIT0,0);//gpio0输出高电平
//开启pwm功能
pwm_init(1000,pwm_duty_init,1,pwm_info);
os_timer_disarm(&pwmTimer);
os_timer_setfn(&pwmTimer,pwm_put,NULL);
os_timer_arm(&pwmTimer,50,TRUE);
}
这里是主函数部分void ICACHE_FLASH_ATTR
user_init(void)
{
system_init_done_cb(sys_init_cb);//创建初始化完成后回调函数
}
有一点要是注意,需要在APP目录下的Makefile的LINKFLAGS_eagle.app.v6 = 里添加PWM的源文件上一篇: vue开发环境搭建步骤-Mac版
下一篇: iOS核心动画 一一 QQ粘性效果
推荐阅读
-
ESP8266 PWM&GPIO
-
ESP8266 下载模式 GPIO 研究
-
ESP8266 WIFI模块学习之路(7)——自写Android手机APP接受单片机数据
-
esp8266 spi slave 驱动调试
-
ESP8266 程序崩溃(crash)时的定位方法一: 寄存器和调用栈(backtrace)
-
Arduino IDE 开发ESP8266 上传DHT11温湿度数据至onenet
-
ESP8266的一些小知识
-
MicroPython网络服务器使用ESP32/ESP8266远程控制家用交流电器
-
微信小程序+mqtt,esp8266温湿度读取的实现方法
-
ESP8266 micropython 驱动 I2C LCD1602 液晶