久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2487|回復(fù): 4
收起左側(cè)

PY32F0單片機(jī)LPTIM中斷喚醒stop模式源程序

[復(fù)制鏈接]
ID:351957 發(fā)表于 2023-4-27 16:35 | 顯示全部樓層 |閱讀模式
==================================================
                                                                                  樣例使用說明
==================================================
功能描述:
此樣例演示了外部觸發(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模式前,必須增加延時,用于LSI和APB時鐘同步
==================================================

#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)時鐘配置 */
       APP_SystemClockConfig();
       /* 初始化GPIO */
       APP_GpioConfig();
        /* 初始化Exti */
       APP_ConfigureExti();
        /* 初始化Time */
       APP_Tim1Config();               
        /* 時鐘設(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秒后自動喚醒
                                                /* 進(jìn)入STOP模式,使用中斷喚醒 */
                                                HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);        
                                }

       }
}

/**
  * @brief  系統(tǒng)時鐘配置函數(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時鐘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;       /* 選擇時鐘源為HSI */
  /* 配置振蕩器 */
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    APP_ErrorHandler();
  }
  /* 時鐘源配置    選擇配置時鐘 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時鐘 1分頻 */
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;         /* APB時鐘 1分頻 */
  /* 配置時鐘源 */
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    APP_ErrorHandler();
  }
}

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

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


LPTIM_HandleTypeDef       LPTIMConf;

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

  RCC_PeriphCLKInitTypeDef LPTIM_RCC;
  RCC_OscInitTypeDef RCC_OscInitStruct;

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

  }

  /*使能LPTIM時鐘*/
  __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);

  /* 延時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ù)
  * @param   nus:延時時間
  * @retval  無
  * @note    此函數(shù)會關(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

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:146878 發(fā)表于 2023-5-11 23:15 | 顯示全部樓層
這測電流的是什么東西?
回復(fù)

使用道具 舉報(bào)

ID:1110945 發(fā)表于 2024-3-4 20:28 | 顯示全部樓層
有沒有直接操作寄存器的例程?這種庫操作太占用代碼空間了。
回復(fù)

使用道具 舉報(bào)

ID:1110945 發(fā)表于 2024-3-8 13:21 | 顯示全部樓層
我手上有XL32F001,設(shè)好端口模式,再幾代碼就進(jìn)入stop模式了,
我測到的是1.6微安@3.0V,比手冊上的1.1微安多一點(diǎn)。
回復(fù)

使用道具 舉報(bào)

ID:1130361 發(fā)表于 2024-8-9 14:43 | 顯示全部樓層
你好,為什么我一開LPTIM stop模式 靜態(tài)電流就從4ua上升到80ua了?
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线不卡 | 中文字幕第一页在线 | 激情一区二区三区 | 久操伊人 | 91aiai | 欧美精品二区 | 欧美日韩综合精品 | 亚洲精品久久久9婷婷中文字幕 | 成人精品一区二区户外勾搭野战 | 91网站视频在线观看 | 福利视频三区 | 久久久精品一区二区三区四季av | 91xxx在线观看 | 亚洲精品国产第一综合99久久 | 亚洲一区二区在线 | 亚洲欧美一区二区三区1000 | 国产日韩一区二区三区 | 久久久精品一区二区三区 | 亚洲国产免费 | caoporn地址| 亚洲综合大片69999 | 不卡av电影在线播放 | 国内自拍视频在线观看 | 国色天香综合网 | 亚洲一二三在线 | 日韩欧美精品一区 | 久久精品视频网站 | 欧美激情国产日韩精品一区18 | 在线不卡视频 | 国产a区 | 日本一二区视频 | av在线免费网 | 国产高清精品一区 | 伊人久久国产 | 在线观看视频91 | 成人精品免费视频 | 国产精品成人一区二区 | 午夜视频免费在线观看 | 午夜影院在线观看 | 久草日韩| 日韩性在线|