天天看点

ESP8266学习——HW Timer内容代码总结框架

HW Timer

  • 内容
    • 效果
    • 步骤
    • 添加hw_timer.c文件
    • hw_timer_init函数
    • 中断源选择
  • 代码
    • 头文件
    • 宏定义
    • 全局变量
    • 延时函数delay_ms
    • LED初始化函数LED_init
    • 硬件定时器回调函数HW_Timer_cb
    • 硬件定时器初始化函数HW_Timer_init
    • user_init
    • 其他
  • 总结框架

内容

效果

步骤

  1. 添加hw_timer.c文件
  2. 使用函数hw_timer_init(0,1);初始化硬件定时器
  3. 定义中断回调函数
  4. 注册回调函数
  5. 设置定时器参数

添加hw_timer.c文件

ESP8266学习——HW Timer内容代码总结框架

hw_timer_init函数

作用:初始化硬件定时器

【参数1:中断源】

  • FRC1_SOURCE==0
  • NMI_SOURCE=1

【参数2:是否重复】

  • 重复:1
  • 不重复:0

中断源选择

ESP8266学习——HW Timer内容代码总结框架

代码

头文件

#include "ets_sys.h"

#include "osapi.h"
#include "user_interface.h"

#include "driver/uart.h"

           

宏定义

全局变量

延时函数delay_ms

void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
{	
	for(;C_time>0;C_time--)
		os_delay_us(1000);

}
           

LED初始化函数LED_init

void ICACHE_FLASH_ATTR LED_init(void)
{
	//选择GPIO4的功能
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
	//设置GPIO4的电平
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);

}
           

硬件定时器回调函数HW_Timer_cb

void HW_Timer_cb(void)
{
	F_LED = !F_LED;
	GPIO_OUTPUT_SET(GPIO_ID_PIN(4),F_LED);			//LED状态翻转

	os_printf("\r\n-----HW_Timer_INT-----\r\n");	//进入定时器函数标志

}

           

硬件定时器初始化函数HW_Timer_init

void HW_Timer_init(void)
{
    // 硬件定时器初始化【FRC1_SOURCE==0、NMI_SOURCE=1】
	hw_timer_init(0,1);					//初始化硬件定时器【参数1:中断源】【参数2:是否重复】
	hw_timer_set_func(HW_Timer_cb);	//注册回调函数
	hw_timer_arm(500000);				//设置定时器参数(单位us,参数必须<=1,677,721)

}
           

user_init

void ICACHE_FLASH_ATTR user_init(void)
{
	uart_init(115200,115200);	// 初始化串口波特率
	os_delay_us(10000);			// 等待串口稳定
	os_printf("\r\n=================================================\r\n");
	os_printf("\t Project:\t%s\r\n", ProjectName);
	os_printf("\t SDK version:\t%s", system_get_sdk_version());
	os_printf("\r\n=================================================\r\n");

	LED_init();		// LED初始化

	HW_Timer_init();
}
           

其他

/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 ICACHE_FLASH_ATTR
user_rf_cal_sector_set(void)
{
    enum flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
            rf_cal_sec = 512 - 5;
            break;
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
            rf_cal_sec = 1024 - 5;
            break;
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        case FLASH_SIZE_64M_MAP_1024_1024:
            rf_cal_sec = 2048 - 5;
            break;
        case FLASH_SIZE_128M_MAP_1024_1024:
            rf_cal_sec = 4096 - 5;
            break;
        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}



void ICACHE_FLASH_ATTR
user_rf_pre_init(void)
{
}

           

总结框架

需要更改的参数

  • 中断源、是否重复
  • 定时时长

要点

  • 回调函数名和注册回调函数中的回调函数名一致
void HW_Timer_cb(void)
{
	.......			//到达指定时间,完成的功能
}

void HW_Timer_init(void)
{
    // 硬件定时器初始化【FRC1_SOURCE==0、NMI_SOURCE=1】
	hw_timer_init(0,1);					//初始化硬件定时器【参数1:中断源】【参数2:是否重复】
	hw_timer_set_func(HW_Timer_cb);		//注册回调函数
	hw_timer_arm(500000);				//设置定时器参数(单位us,参数必须<=1,677,721)

}
           

继续阅读