ESP8266 PWM&GPIO

    這是一個關於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的源文件

源碼下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章