串口
需要添加uart.h和uart_register.h两个头文件
uart_init(9600,9600);
串口初始化参数包括串口1波特率,串口2波特率
uart0_tx_buffer
作用:通过UART0输出用户数据
参数: u8 *buf 数据缓存和u16 len 数据长度
uart0_rx_intr_handler
功能:UART中断处理函数,里面是收到数据包时候的处理
参数:是指向数据结构体RcvMsgBuff的指针
uart_div_modify
功能:设置UART波特率
参数:u8 uart_no 串口号和u32 DivLotchValue 分频参数
os_printf
跟平时的print用法一样,默认使用uart0打印
软件定时器
ESP8266的软件定时器其实跟单片机类似,有定时时间设置有回调函数(中断服务函数)。
用GPIO_OUTPUT_SET(GPIO_ID_PIN(4),F_LED);
这句是把GPIO4置位为F_LED;那么就还要有引脚初始化如下
void ICACHE_FLASH_ATTR LED_Init_JX(void)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);
}
然后就是软件定时器初始化
void ICACHE_FLASH_ATTR OS_Timer_1_Init_JX(u32 time_ms, u8 time_repetitive)
{
os_timer_disarm(&OS_Timer_1); // ③:关闭软件定时器
// 设置定时器
// 参数一:要设置的定时器;参数二:回调函数(需类型转换);参数三:回调函数的参数
os_timer_setfn(&OS_Timer_1,(os_timer_func_t *)OS_Timer_1_cb, NULL);
// 使能(启动)ms定时器
// 参数一:要使能的定时器;参数二:定时时间(单位:ms);参数三:1=重复/0=只一次
os_timer_arm(&OS_Timer_1, time_ms, time_repetitive); // ⑤:设置定时器参数并使能定时器
//-------------------------------------------------------------------
// 【如未调用system_timer_reinit,可支持范围:[5ms ~ 6,870,947ms]】
// 【如果调用system_timer_reinit,可支持范围:[100ms ~ 428,496 ms]】
//-------------------------------------------------------------------
}
注意定时器设置需要先关闭软件定时器,最后在主函数中
void ICACHE_FLASH_ATTR user_init(void)
{
uart_init(115200,115200); // 初始化串口波特率
os_delay_us(10000); // 等待串口稳定
LED_Init_JX(); // LED初始化
OS_Timer_1_Init_JX(500,1); // 500ms(重复)
}
硬件定时器
相比软件定时器的软件部分,硬件定时器的软件部分就要简单的一点
首先是初始化,同时也是回调函数
void HW_Timer_Int(void)
{
FLAG = !FLAG;
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),FLAG);
}
然后在主函数中
void ICACHE_FLASH_ATTR
user_init(void)
{
uart_init(115200,115200);
os_delay_us(10000);
LED_Init_JX();
hw_timer_init(0,1);
hw_timer_set_func(HW_Timer_Int);
hw_timer_arm(500000);
}
最后三句的意思是:
初始化硬件定时器【参数1:中断源】【参数2:是否重复】
注册硬件定时器中断回调函数
设置定时器参数(单位us,参数必须<=1,677,721)