欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: PY32F0單片機(jī)LPTIM中斷喚醒stop模式源程序 [打印本頁]

作者: 123按時(shí)到崗    時(shí)間: 2023-4-27 16:35
標(biāo)題: PY32F0單片機(jī)LPTIM中斷喚醒stop模式源程序
==================================================
                                                                                  樣例使用說明
==================================================
功能描述:
此樣例演示了外部觸發(fā)LPTIM,由LPTIM中斷喚醒stop模式,每次喚醒后再次進(jìn)入stop模式,每6s喚醒一次,并在中斷中翻轉(zhuǎn)LED燈。
stop模式下,測得功耗8.96uA
==================================================
測試環(huán)境:
測試用板:PY32F030_STK
MDK版本: 5.28
==================================================
使用步驟:
1. 編譯下載程序到MCU,并運(yùn)行;
2. 按下按鍵進(jìn)入stop模式;
3. 6s后喚醒stop模式并循環(huán)進(jìn)入stop模式再喚醒;
4. 中斷中LED保持頻率閃爍;
==================================================
注意事項(xiàng):
每次喚醒后再次進(jìn)入Stop模式前,必須增加延時(shí),用于LSI和APB時(shí)鐘同步
==================================================

#include "main.h"
#include "tim.h"
#include "gpio.h"
#include "exti.h"
#include "lptim.h"

void APP_SystemClockConfig(void);
int main(void)
{
      /* 初始化所有外設(shè),F(xiàn)lash接口,SysTick */
      HAL_Init();            
       /* 系統(tǒng)時(shí)鐘配置 */
       APP_SystemClockConfig();
       /* 初始化GPIO */
       APP_GpioConfig();
        /* 初始化Exti */
       APP_ConfigureExti();
        /* 初始化Time */
       APP_Tim1Config();               
        /* 時(shí)鐘設(shè)置 */
        APP_RCCOscConfig();        
        /* LPTIM初始化 */
        APP_LPTIMInit();
        /* 使能PWR */
        __HAL_RCC_PWR_CLK_ENABLE();
        /* 關(guān)閉Systick中斷 */
        HAL_SuspendTick();        

        while (1)
       {

                                if(KEY_down_up==Down_KEY)//檢測到一次下降沿到來
                                {
                                                KEY_down_up=Up_KEY;

                                                /* 關(guān)閉Systick中斷 */
                                                HAL_SuspendTick();        
                                                /* 失能 LPTIM */
                                                __HAL_LPTIM_DISABLE(&LPTIMConf);                        
                                                /* 使能LPTIM和中斷,并開啟單次計(jì)數(shù)模式 */
                                                APP_LPTIMStart(6);//6秒后自動(dòng)喚醒
                                                /* 進(jìn)入STOP模式,使用中斷喚醒 */
                                                HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);        
                                }

       }
}

/**
  * @brief  系統(tǒng)時(shí)鐘配置函數(shù)
  * @param  無
  * @retval 無
  */
void APP_SystemClockConfig(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /* 選擇振蕩器HSI,LSI */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;                          /* 開啟HSI */
  RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;                          /* HSI 1分頻 */
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_16MHz; /* 配置HSI時(shí)鐘16MHz */
  RCC_OscInitStruct.HSEState = RCC_HSE_OFF;                         /* 關(guān)閉HSE */
  RCC_OscInitStruct.LSIState = RCC_LSI_OFF;                           /* 關(guān)閉LSI */
  RCC_OscInitStruct.LSEState = RCC_LSE_OFF;                          /* 關(guān)閉LSE */
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF;                     /* 關(guān)閉PLL */
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;       /* 選擇時(shí)鐘源為HSI */
  /* 配置振蕩器 */
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    APP_ErrorHandler();
  }
  /* 時(shí)鐘源配置    選擇配置時(shí)鐘 HCLK,SYSCLK,PCLK1 */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;        /* AHB時(shí)鐘 1分頻 */
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;         /* APB時(shí)鐘 1分頻 */
  /* 配置時(shí)鐘源 */
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    APP_ErrorHandler();
  }
}

/**
  * @brief  錯(cuò)誤執(zhí)行函數(shù)
  * @param  無
  * @retval 無
  */
void APP_ErrorHandler(void)
{
  while (1)
  {
  }
}

#include "lptim.h"
#include "gpio.h"


LPTIM_HandleTypeDef       LPTIMConf;

/**
  * @brief   時(shí)鐘配置函數(shù)
  * @param   無
  * @retval  無
  */
void APP_RCCOscConfig(void)
{

  RCC_PeriphCLKInitTypeDef LPTIM_RCC;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  /* LSI時(shí)鐘配置 */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;  /* 選擇配置LSI */
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;          /* LSI開啟 */  
  /*時(shí)鐘初始化*/
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
  }
        
  /* LPTIM時(shí)鐘配置 */
  LPTIM_RCC.PeriphClockSelection = RCC_PERIPHCLK_LPTIM;     /* 選擇配置外設(shè)時(shí)鐘:LPTIM */
  LPTIM_RCC.LptimClockSelection = RCC_LPTIMCLKSOURCE_LSI;   /* 選擇LPTIM時(shí)鐘源:LSI */
  /* 外設(shè)時(shí)鐘初始化 */
  if (HAL_RCCEx_PeriphCLKConfig(&LPTIM_RCC) != HAL_OK)
  {

  }

  /*使能LPTIM時(shí)鐘*/
  __HAL_RCC_LPTIM_CLK_ENABLE();
}

/**
  * @brief   初始化LPTIM
  * @param   無
  * @retval  無
  */
void APP_LPTIMInit(void)
{
  /*LPTIM配置*/
  LPTIMConf.Instance = LPTIM;                         /* LPTIM */
  LPTIMConf.Init.Prescaler = LPTIM_PRESCALER_DIV128;  /* 128分頻 */
  LPTIMConf.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE; /* 立即更新模式 */
  /*初始化LPTIM*/
  if (HAL_LPTIM_Init(&LPTIMConf) != HAL_OK)
  {

  }

}

/**
  * @brief   使能LPTIM和中斷,并開啟單次計(jì)數(shù)模式
  * @param   無
  * @retval  無
  */
void APP_LPTIMStart(uint8_t i)
{
  /* 使能重載中斷 */
  __HAL_LPTIM_ENABLE_IT(&LPTIMConf, LPTIM_IT_ARRM);

  /* 使能LPTIM */
  __HAL_LPTIM_ENABLE(&LPTIMConf);

  /*加載重載值*/
  __HAL_LPTIM_AUTORELOAD_SET(&LPTIMConf, 51*5*i);

  /* 延時(shí)65us */
  APP_delay_us(65);

  /* 開啟單次計(jì)數(shù)模式 */
  __HAL_LPTIM_START_SINGLE(&LPTIMConf);
        
}

void LPTIM1_IRQHandler(void)
{
  HAL_LPTIM_IRQHandler(&LPTIMConf);
}

/**
  * @brief   LPTIM重裝載中斷回調(diào)函數(shù)
  * @param   無
  * @retval  無
  */
void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
    /* LED翻轉(zhuǎn) */
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);  
}


/**
  * @brief   微秒延時(shí)函數(shù)
  * @param   nus:延時(shí)時(shí)間
  * @retval  無
  * @note    此函數(shù)會(huì)關(guān)閉SysTick中斷,如需要使用請重新初始化SysTick
  */
void APP_delay_us(uint32_t nus)
{
  HAL_SuspendTick();
  uint32_t temp;
  SysTick->LOAD=nus*(SystemCoreClock/1000000);
  SysTick->VAL=0x00;
  SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
  do
  {
    temp=SysTick->CTRL;
  }
  while((temp&0x01)&&!(temp&(1<<16)));
  SysTick->CTRL=0x00;
  SysTick->VAL =0x00;
}

#ifndef _LPTIM_H
#define _LPTIM_H
#include "main.h"


extern LPTIM_HandleTypeDef       LPTIMConf;

void APP_RCCOscConfig(void);
void APP_LPTIMInit(void);
void APP_LPTIMStart(uint8_t i);
void APP_delay_us(uint32_t nus);


#endif


Keil代碼下載: PY32F0_LPTIM.7z (1.03 MB, 下載次數(shù): 20)

1.png (93.45 KB, 下載次數(shù): 118)

1.png

作者: pdwdzz    時(shí)間: 2023-5-11 23:15
這測電流的是什么東西?
作者: 明日之星8    時(shí)間: 2024-3-4 20:28
有沒有直接操作寄存器的例程?這種庫操作太占用代碼空間了。
作者: 明日之星8    時(shí)間: 2024-3-8 13:21
我手上有XL32F001,設(shè)好端口模式,再幾代碼就進(jìn)入stop模式了,
我測到的是1.6微安@3.0V,比手冊上的1.1微安多一點(diǎn)。
作者: YANGNAY12    時(shí)間: 2024-8-9 14:43
你好,為什么我一開LPTIM stop模式 靜態(tài)電流就從4ua上升到80ua了?




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1