<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ESP8266 PMW使用的簡單介紹

      前言

      呼吸燈是常見的LED應用。LED呼吸燈的流程是緩緩點亮LED燈,再緩緩熄滅LED燈。在夜色下,緩慢閃爍的LED顯得格外迷人。 如何使用ESP8266MOD實現此效果, 這里簡單地總結一下。

      一、PWM單元介紹

      ESP8266有四個PWM輸出接口,分別是:PWM0(GPIO12)、PWM1(GPIO15)、PWM2(GPIO14)、PWM3(GPIO4)。由于PWM接口是由軟件來實現的,因此用戶可自行拓展(最大可拓展8個,詳細請參考ESP8266 SDK的pwm.h文件)。

      PWM可調節的周期在1000us~10000us,即100HZ~1KHZ之間。
      二、PWM配置流程介紹

      1.首先對PWM的占空比、周期以及PWM通道進行配置。

      2.配置系統定時器,將呼吸燈運行程序配置成每30ms運行一次,以刷新PWM的占空比。
      三、相關API介紹
      1、pwm_init
      API 介紹    -    -
      功能介紹    初始化PWM配置    -
      函數原型    void pwm_init(uint32 period, uint32 *duty, uint32 pwm_channel_num, uint32 (*pin_info_list)[3]);    -
      參數介紹    period    PWM周期
          -    *duty    各PWM通道的占空比
          -    pwm_channel_num    需要使用的PWM通道數量
          -    (*pin_info_list)[3]    使用的PWM通道的GPIO參數

      uint32_t io_info[ ][ 3 ] =
      {
      /** 該參數在ESP8266 SDK的user_light.h中 */
      { PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM }, 
      };

      uint32_t duty[] = {0};

      /** 配置PWM的周期為1000us,占空比為0,PWM通道數量為1 */
      pwm_init( 1000, duty, 1, io_info );

      2、pwm_start
      API 介紹    -    -
      功能介紹    更新PWM配置    
      函數原型    void pwm_start(void)    
      注釋    在PWM參數配置完成后需要調用該函數    
      3、pwm_set_duty
      API 介紹    -    -
      功能介紹    設置某PWM通道的占空比    -
      函數原型    void pwm_set_duty(uint32 duty, uint8 channel)    -
      參數介紹    duty    新的PWM通道占空比
      -    channel    需要設置的PWM通道(從零開始算)

      示例:

      /** 設置PWM通道1的占空比為100 */
      pwm_set_duty( 100, 0 );

      /** 使PWM配置生效 */
      pwm_start();

      4、pwm_get_duty
      API 介紹    -    -
      功能介紹    獲取某通道的占空比的數值    -
      函數原型    uint32 pwm_get_duty(uint8 channel)    -
      參數介紹    channel    需要設置的PWM通道(從零開始算)
      返回值    該通道的占空比    -
      5、pwm_set_period
      API 介紹    -    -
      功能介紹    設置某PWM通道的周期    -
      函數原型    void pwm_set_period(uint32 period, uint8 channe)    -
      參數介紹    period    新的PWM通道周期
      -    channel    需要設置的PWM通道(從零開始算)

      示例:

      /** 設置PWM通道1的周期為100us */
      pwm_set_period( 100, 0 );

      /** 使PWM配置生效 */
      pwm_start();

      6、pwm_get_period
      API 介紹    -    -
      功能介紹    獲取某通道的周期    -
      函數原型    uint32 pwm_get_period(uint8 channel)    -
      參數介紹    channel    需要設置的PWM通道(從零開始算)
      返回值    某通道的周期    -

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

         #include "user_light.h"
         #include "gpio.h"

         #include "user_interface.h"

         static os_timer_t os_timer;

         /** 呼吸燈運行程序 */
         void ESP8266_PWM_RUN( void )
         {
             /** PWM占空比變量 */
             static u8 set_duty = 0;

             /** 占空比加減標志 */
             static bool f = true;
             if ( f == true )
             {
                 if ( ++set_duty >= 100 )
                 {
                     f = false;
                 }
             }
             else
             {
                 if ( --set_duty <= 0 )
                 {
                     f = true;
                 }
             }

             /** 更新PWM通道0的占空比 */
             pwm_set_duty( set_duty, 0 );
             pwm_start();
         }

         /** 初始化PWM配置、系統定時器配置 */
         void ESP8266_PWM_Init( void )
         {
         //    struct pwm_param pwm_config;
             uint32_t io_info[ ][ 3 ] =
             {
                 { PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM }, 
             };

             uint32_t duty[ ] = { 0 };

         //    pwm_config.duty[ 0 ] = 0;
         //    pwm_config.freq = 0;
         //    pwm_config.period = 1000;

             pwm_init( 1000, duty, 1, io_info );

             /** 配置定時器每30ms執行一次ESP8266_PWM_RUN()函數 */
             os_timer_disarm( &os_timer );
             os_timer_setfn( &os_timer, (ETSTimerFunc *) ( ESP8266_PWM_RUN ), NULL );
             os_timer_arm( &os_timer, 30, true );
         }

         /** 用戶初始化程序,根據測試該程序只運行一次 */
         void user_init(void)
         {
             ESP8266_PWM_Init();
         }

      posted @ 2025-10-14 12:56  裘莊三少  閱讀(9)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲人成网站18禁止无码| √天堂中文在线最新版| 国产成人无码av大片大片在线观看| 挺进粗大尤物人妻中文字幕| 在线观看中文字幕国产码| 精品乱人伦一区二区三区| 最新午夜男女福利片视频| 亚洲成a人片77777kkkk| 99久久免费精品色老| 亚洲AV成人片不卡无码| 黄龙县| 在线天堂最新版资源| 久久精品国产亚洲精品| 激情综合色综合啪啪开心| 亚洲中文字幕人成影院| 啊┅┅快┅┅用力啊岳网站| 97精品伊人久久久大香线蕉| 日韩精品一区二区蜜臀av| 久久久久久久一线毛片| 国产成人综合色视频精品| 377P欧洲日本亚洲大胆| 毛多水多高潮高清视频| 亚洲中文字幕精品无人区| 欧美激情内射喷水高潮| 男女高潮喷水在线观看| 国产av中文字幕精品| 国产精品美女www爽爽爽视频 | 亚洲精品97久久中文字幕无码| 亚洲av永久无码精品天堂久久| 国产视频一区二区在线看| 夜色福利站WWW国产在线视频| 男女激情一区二区三区| 午夜成人性爽爽免费视频| 中文字幕av高清片| 黄男女激情一区二区三区| 亚洲gay片在线gv网站| 德清县| 丰满人妻被黑人猛烈进入| 高清国产一区二区无遮挡| 亚洲熟女乱色综合亚洲图片 | 日韩中文字幕免费在线观看|