ESP8266_SDK開發基礎(3)硬體定時器

志遠電子發表於2019-05-11

環境及工具與第一章相同,這裡就不在重複!

程式碼基於第一章,將原軟體定時器實現的功能改為硬體定時器實現,user_main.c程式碼示例如下


#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"

#include "user_interface.h"

#include "user_devicefind.h"
#include "user_webserver.h"

#if ESP_PLATFORM
#include "user_esp_platform.h"
#endif

void user_rf_pre_init(void)
{
}

/*******************************************************************************
 * 自定義引腳執行函式_定時器回撥
*******************************************************************************/
void Task_Run(void){
    static bool status = false;

    if(GPIO_INPUT_GET(14)){//讀取GPIO14的引腳電平
        if (status == true){
            status = false;
            GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);//GPIO12輸出低電平
        }else{
            status = true;
            GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);//GPIO12輸出高電平
        }
    }else{
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);//GPIO12輸出高電平
    }
}
/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void user_init(void)
{
    /*設定串列埠波特率*/
    uart_init(115200,9600);
    /*列印版本資訊*/
    os_printf("
");os_printf("SDK version:%s
", system_get_sdk_version());
    /*配置GPIO12*/
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);
    /*配置GPIO14*/
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U,FUNC_GPIO14);
    /*配置 硬體定時器*/
    hw_timer_init(0,1);//初始化ISR硬體定時器,自動填裝
    hw_timer_set_func(Task_Run);//設定定時器回撥函式
    hw_timer_arm(1000000);//使能硬體中斷定時器,定時1秒
}

相關文章