STM32-电源管理(实现低功耗)

目录

电源管理

上电复位(POR)和掉电复位(PDR)

配置PVD监控功能

WFI和WFE命令

进入停止模式

进入待机模式

实验环节1:PWR_PVD监控

实验操作

PVD配置

测试环节

实验环节2:PWR睡眠模式

实验操作

测试环节

实验环节3:PWR待机模式

实验操作

测试环节

实验现象

实验环节4:PWR停止模式

实验操作

测试环节


电源管理

STM32 HAL库对电源管理提供了完善的函数和命令。

工作模式(高功耗->低功耗):运行、睡眠、停止、待机。

若备份域电源正常供电,备份域内的RTC都可以正常运行,备份域内的寄存器的数据会被保存,不受功耗模式影响。

低功耗模式:

        睡眠模式:内核停止,外设仍然运行,功耗最高。

        停止模式:所有时钟都停止,功耗较低,典型大概在20uA左右。

        待机模式:1.8V内核电源关闭,功耗最低,典型大概在2uA左右。

一般开发中常用停止模式,因为功耗较低且任一中断或事件都能唤醒。待机模式只有特定事件或引脚可以唤醒,实时性不如停止模式。

上电复位(POR)和掉电复位(PDR)

当检测到VDD的电压低于阈值VPOR及VPDR时,无需外部电路辅助,STM32芯片会自动保持在复位状态,防止因电压不足强行工作而带来严重的后果。

在刚开始电压低于VPOR时(约1.92V),STM32保持在上电复位状态(POR,Power On Reset)。当VDD电压持续上升至大于VPOR时,芯片开始正常运行。

而在芯片开始正常运行的时候,当检测到VDD电压下降至低于VPDR阈值(约1.88V),会进入掉电复位状态(PDR,Power Down Reset)。

配置PVD监控功能

PVD可监控VDD的电压,当它低于阈值时可产生PVD中断以让系统进行紧急处理,这个阈值可以直接使用库函数PWR_PVDLevelConfig配置成某一个的阈值等级。

WFI和WFE命令

进入各种低功耗模式时都需要调用WFI或WFE命令,实质上都是内核指令,在库文件 core_cm3.h 或 cmsis_armcc.h 中把这些指令封装成了函数。

/* 等待中断。是一种暂停执行指令,暂停至任意中断产生后被唤醒 */
#define __WFI                             __wfi

/* 等待事件。是一种暂停执行指令,暂停至任意事件产生后被唤醒 */
#define __WFE                             __wfe

这两个指令,调用后都能进入低功耗模式,需要使用__WFI();和__WFE();来调用(因为__wfi和__wfe是编译器内置的函数,函数内部调用了相对应的汇编指令)。

具体可查《cortex-CM3/CM4权威指南》。

进入停止模式

直接调用WFI和WFE指令可以进入睡眠模式,而进入停止模式这还需要在调用指令前设置一些寄存器位,STM32 HAL库把这部分的操作封装到HAL_PWR_EnterSTOPMode()

参数一:稳压器正常运行的话,即电源不进低功耗,唤醒基本没延迟。反之,有一点延迟。

参数二:WFI进入要中断唤醒,WFE进入要事件唤醒。也可两种一同选择。

停机模式唤醒后自动选择HSI作为系统时钟(8MHz)运行,一般都需要重新配置,直接调用系统时钟配置函数即可。

停机模式唤醒后,Flash程序是从中断或事件开始执行的。

/**
  * @brief 进入停止模式
  * @note  在停止模式下所有I/O都会保持在停止前的状态.
  * @note  当使用中断或唤醒事件退出停止模式时,HSI RC振荡器被选择为系统时钟。
  * @note  当稳压器在低功率模式下工作时,从停止模式唤醒时会产生额外的启动延迟。
  *        通过在停止模式中保持内部稳压器打开,虽然启动时间减少,但消耗更高。
  * @param Regulator: 在停止模式下指定稳压器状态。
  *            @arg PWR_MAINREGULATOR_ON: 稳压器正常运行
  *            @arg PWR_LOWPOWERREGULATOR_ON: 稳压器低功耗运行
  * @param STOPEntry: 指定是否使用WFI或WFE指令进入停止模式。
  *            @arg PWR_STOPENTRY_WFI: 使用WFI指令进入停止模式
  *            @arg PWR_STOPENTRY_WFE: 使用WFE指令进入停止模式
  * @retval None
  */
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)
{
    /* 检查参数 */
    assert_param(IS_PWR_REGULATOR(Regulator));
    assert_param(IS_PWR_STOP_ENTRY(STOPEntry));

    /* 清除PWR寄存器中的PDDS位以指定当CPU进入深度睡眠时进入停止模式 */
    CLEAR_BIT(PWR->CR,  PWR_CR_PDDS);

    /* 根据稳压参数值,通过在PWR寄存器中设置LPDS位来选择稳压模式 */
    MODIFY_REG(PWR->CR, PWR_CR_LPDS, Regulator);

    /* 设置内核系统控制寄存器的SLEEPDEEP位 */
    SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));

    /* 选择停止模式进入 */
    if (STOPEntry == PWR_STOPENTRY_WFI)
    {
        /* 请求等待中断 */
        __WFI();
    }
    else
    {
        /* 请求等待事件 */
        __SEV();
        PWR_OverloadWfe(); /* 本地重新定义WFE */
        PWR_OverloadWfe(); /* 本地重新定义WFE */
    }

    /* 以下的程序是当重新唤醒时才执行的,清除内核系统控制寄存器的SLEEPDEEP位 */
    CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));
}

进入停止模式后,STM32的所有I/O都保持在停止前的状态。

如何做到停止模式更低功耗?

        把所有引脚IO口释放,全部配置成模拟输入状态。(注意:配置前不要锁定IO口,几乎0消耗,但唤醒后需要重新配置IO口)

        HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

此时正确配置的功耗在10uA左右。

当I/O端口被配置为模拟输入时:

        输出缓冲器被禁止;

        禁止施密特触发器输入,实现了每个模拟I/O引脚上的零消耗。施密特触发器触发输出值被强制置0;

        强上拉和下拉电阻被禁止;

        读取输入数据寄存器时数值为0。

进入待机模式

STM32 HAL库把这部分的操作封装到HAL_PWR_EnterSTANDBYMode()。

/**
  * @brief 进入待机模式
  * @note  待机模式下,除以下情况外,所有I/O引脚均为高阻抗::
  *          - 复位引脚(仍然有效)
  *          - TAMPER pin if configured for tamper or calibration out.
  *          - WKUP pin (PA0) (如果使能WKUP唤醒功能).
  * @retval None
  */
void HAL_PWR_EnterSTANDBYMode(void)
{
    /* 选择待机模式 */
    SET_BIT(PWR->CR, PWR_CR_PDDS);

    /* 设置内核系统控制寄存器的SLEEPDEEP位*/
    SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));

    /* 存储操作完毕时才能进入待机模式,使用以下语句确保存储操作执行完毕 */
#if defined ( __CC_ARM)
    __force_stores();
#endif
    /* 请求等待中断 */
    __WFI();
}

待机模式也可以使用WFE指令进入的,如果有需要可以自行修改。

在进入待机模式后,除了被使能用于唤醒的I/O,其余I/O都进入高阻态,而从待机模式唤醒后,想防御复位STM32芯片,程序重新从头开始执行。

实验环节1:PWR_PVD监控

实验操作

使用外部可调电源,调节成5V输出,连接到开发板5V和GND排针给板子进行供电;

复位开发板,电压正常时LED为绿色;

向下调节可调电源的电压,大约降到4V时,LED为红色。(程序中控制PVD监控电压约为2.8V,当5V降到4V时,连接STM32的VDD电源会降于2.8V,产生PVD事件,在中断中控制亮红灯)。

注意:其他电源线都拔掉(包括下载器、USB线)。不能远高于5V而导致烧坏开发板。

PVD配置

void PVD_Config(void)
{
	PWR_PVDTypeDef sConfigPVD;
	
	/*使能 PWR 时钟 */
	__HAL_RCC_PWR_CLK_ENABLE();
	
	/* 配置 PVD 中断 */
	HAL_NVIC_SetPriority(PVD_IRQn, 0 ,0);
	HAL_NVIC_EnableIRQ(PVD_IRQn);  

	/* 配置PVD级别6 (PVD检测电压的阈值为2.8V,VDD电压低于2.8V时产生PVD中断,
	   具体数据可查询数据手册获知) 具体级别根据自己的实际应用要求配置*/
	sConfigPVD.PVDLevel = PWR_PVDLEVEL_6;
	sConfigPVD.Mode 	= PWR_PVD_MODE_IT_RISING_FALLING;
	HAL_PWR_ConfigPVD(&sConfigPVD);
	
	/* 使能PVD输出 */
	HAL_PWR_EnablePVD();
}

测试环节

void PVD_IRQHandler(void)
{
	HAL_PWR_PVD_IRQHandler();
}

void HAL_PWR_PVDCallback(void)
{
	LED红灯
}

void test(void)
{
	初始化
	LED绿灯

	// 配置PVD,当电压过低时,会进入中断服务函数,亮红灯
	PVD_Config();
	
	while(1)
	{}
}

实验环节2:PWR睡眠模式

实验操作

LED:绿灯正常运行,红灯睡眠状态,蓝灯刚被唤醒。

KEY:key1和key2配置成IO中断模式。

运行一段时间后自动进入睡眠时间,通过按键(key1或key2)唤醒。

睡眠状态下,DAP下载器无法给STM32下载程序,可唤醒后再下载或按复位键使芯片处于复位状态下下载后松开复位键。

测试环节

int main(void)
{
	初始化

    while (1)
    {
        LED绿灯
        HAL_Delay(2000);

        LED红灯
        HAL_SuspendTick();	//暂停滴答时钟,防止通过滴答时钟中断唤醒
        //进入睡眠模式
        HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
		
        //等待中断唤醒  K1或K2按键中断
		
        LED蓝灯
        HAL_ResumeTick();	//被唤醒后,恢复滴答时钟
        HAL_Delay(2000);
		
        //继续执行while循环
    }
}

实验环节3:PWR待机模式

实验操作

LED:绿灯表示本次复位是上电或引脚复位,红灯待机状态,蓝灯刚被唤醒。

KEY:key2配置成输入模式。

长按KEY2按键会进入待机模式,待机模式下KEY1按键可唤醒,唤醒后系统会复位。可通过检测PWR_CSR:WUF标志确定复位来源。

待机模式下,DAP下载器无法给STM32下载程序,可唤醒后再下载。

注意:由于WKUP引脚(PA0)必须使用上升沿才能唤醒待机状态的系统,所以硬件设计PA0引脚连接到KEY1,且按下KEY1时会在PA0引脚产生上升沿,从而可实现唤醒的功能。

测试环节

/**
  * @brief  用于检测按键是否被长时间按下
  * @param  无
  * @retval 1 :按键被长时间按下  0 :按键没有被长时间按下
  */
static uint8_t KEY2_LongPress(void)
{
    uint8_t downCnt = 0;		//记录按下的次数
    uint8_t upCnt = 0;			//记录松开的次数
	
    while (1)					//死循环,由return结束
    {	
        HAL_Delay(20);			//延迟一段时间再检测

        if (HAL_GPIO_ReadPin(KEY2_GPIO_PORT, KEY2_PIN) == SET)	//检测到按下按键
        {
            downCnt++;			//记录按下次数
            upCnt = 0;			//清除按键释放记录

            if (downCnt >= 100)	//按下时间足够
            {
                return 1; 		//检测到按键被时间长按下
            }
        }
        else
        {
            upCnt++; 			//记录释放次数

            if (upCnt > 5)		//连续检测到释放超过5次
            {
                return 0;		//按下时间太短,不是按键长按操作
            }
        }
    }
}

int main(void)
{
	初始化

    /* 使能电源管理单元的时钟,必须要使能时钟才能进入待机模式 */
	__HAL_RCC_PWR_CLK_ENABLE();

    //检测复位来源
    if (__HAL_PWR_GET_FLAG(PWR_FLAG_WU) == SET)
    {	// 复位前为待机模式
        __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
        LED蓝灯
    }
    else
    {
		// 复位前为正常运行
        LED绿灯
    }

    while (1)
    {
        // K2 按键长按进入待机模式
        if (KEY2_LongPress())
        {
            LED红灯
            HAL_Delay(1000);

            /*清除WU状态位*/
            __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

            /* 使能WKUP引脚的唤醒功能,使能PA0*/
            HAL_PWR_EnableWakeUpPin(0x00000100U);

            //暂停滴答时钟,防止通过滴答时钟中断唤醒
            HAL_SuspendTick();
			
            /* 进入待机模式 */
            HAL_PWR_EnterSTANDBYMode();
        }
    }
}

实验现象

开机正常运行绿灯。长按KEY2按键,显红灯,过1s后进入待机模式LED灭。按下KEY1按键退出待机模式自动复位,显蓝灯。按下复位键,重新运行绿灯。

实验环节4:PWR停止模式

实验操作

LED:绿灯正常运行,红灯停止状态,蓝灯刚被唤醒。

KEY:key1和key2配置成IO中断模式。

运行一段时间后自动进入停止时间,通过按键(key1或key2)唤醒。

待机模式下,DAP下载器无法给STM32下载程序,可唤醒后再下载。

注意:由于WKUP引脚(PA0)必须使用上升沿才能唤醒待机状态的系统,所以硬件设计PA0引脚连接到KEY1,且按下KEY1时会在PA0引脚产生上升沿,从而可实现唤醒的功能。

测试环节

/**
  * @brief  从停止模式唤醒后配置系统时钟:启用HSE、PLL并选择PLL作为系统时钟源。

  * @param  无
  * @retval 无
  */
static void SYSCLKConfig_STOP(void)
{
	RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
	RCC_OscInitTypeDef RCC_OscInitStruct = {0};
	uint32_t pFLatency = 0;

	/* 启用电源控制时钟 */
	__HAL_RCC_PWR_CLK_ENABLE();

	/* 根据内部RCC寄存器获取振荡器配置 */
	HAL_RCC_GetOscConfig(&RCC_OscInitStruct);

	/* 从停止模式唤醒后重新配置系统时钟: 启用HSE和PLL */
	RCC_OscInitStruct.OscillatorType  = RCC_OSCILLATORTYPE_HSE;
	RCC_OscInitStruct.HSEState        = RCC_HSE_ON;
	RCC_OscInitStruct.PLL.PLLState    = RCC_PLL_ON;
	if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
	{
		while(1) { ; }
	}

	/* 根据内部RCC寄存器获取时钟配置 */
	HAL_RCC_GetClockConfig(&RCC_ClkInitStruct, &pFLatency);

	/* 选择 PLL 作为系统时钟源, 并配置 HCLK、PCLK1 和 PCLK2时钟分频系数 */
	RCC_ClkInitStruct.ClockType     = RCC_CLOCKTYPE_SYSCLK;
	RCC_ClkInitStruct.SYSCLKSource  = RCC_SYSCLKSOURCE_PLLCLK;
	if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, pFLatency) != HAL_OK)
	{
		while(1) { ; }
	}
}

int main(void) 
{
	uint32_t 	SYSCLK_Frequency = 0; 
	uint32_t 	HCLK_Frequency = 0;
	uint32_t 	PCLK1_Frequency = 0;
	uint32_t 	PCLK2_Frequency = 0;
	uint32_t 	SYSCLK_Source = 0;
	
	初始化

	while(1)
	{	
		LED绿灯
		HAL_Delay(2000);		

		// 进入停止模式,亮红灯,按KEY1或KEY2按键可唤醒
		LED_RED;
		HAL_SuspendTick();			//暂停滴答时钟,防止通过滴答时钟中断唤醒
		/* 进入停止模式,设置电压调节器为低功耗模式,等待中断唤醒 */
		HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
		
		// 等待中断唤醒  K1或K2按键中断	
		
		// 被唤醒,亮蓝灯指示
		LED蓝灯
		SystemCoreClockUpdate();	//根据时钟寄存器的值更新SystemCoreClock变量
		//获取唤醒后的时钟状态	
		SYSCLK_Frequency = HAL_RCC_GetSysClockFreq(); 
		HCLK_Frequency   = HAL_RCC_GetHCLKFreq();
		PCLK1_Frequency  = HAL_RCC_GetPCLK1Freq();
		PCLK2_Frequency  = HAL_RCC_GetPCLK2Freq();
		SYSCLK_Source    = __HAL_RCC_GET_SYSCLK_SOURCE();
		 
		/* 从停止模式唤醒后配置系统时钟:启用HSE、PLL*/
		/* 选择PLL作为系统时钟源(HSE和PLL在停止模式下被禁用)*/
		SYSCLKConfig_STOP();
		
		HAL_ResumeTick();			//被唤醒后,恢复滴答时钟
		//获取重新配置后的时钟状态
		SYSCLK_Frequency = HAL_RCC_GetSysClockFreq(); 
		HCLK_Frequency   = HAL_RCC_GetHCLKFreq();
		PCLK1_Frequency  = HAL_RCC_GetPCLK1Freq();
		PCLK2_Frequency  = HAL_RCC_GetPCLK2Freq();
		SYSCLK_Source    = __HAL_RCC_GET_SYSCLK_SOURCE();
		
		HAL_Delay(2000);	

		//继续执行while循环
	}
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F407ZGT6GK原理图 STM32F407ZGT6 :ARM Cortex-M4 32位 MCU+FPU,210DMIPS,高达1 MB Flash/192 + 4KB RAM,USB OTG HS/FS,以太网,17 个TIM,3个ADC,15 个通信接口、摄像头。 特性: 1、内核:带有 FPU 的 ARM® 32 位 Cortex®-M4CPU、在 Flash 存储器中实现零等待状态运行性能的自适应实时加速器 (ART 加速器 ™)、主频高达 168MHz, MPU,能够实现高达210 DMIPS/1.25DMIPS/MHz (Dhrystone 2.1)的性能,具有 DSP 指令集。 2、存储器 – 高达1 MB Flash – 高达 192+4 KB的SRAM, 包括64-KB的CCM(内核耦合存储器)数据 RAM – 具有高达 32 位数据总线的灵活外部存储控制器: SRAM、 PSRAM、 NOR/NAND存储器 3、 LCD 并行接口,兼容 8080/6800 模式 4、 时钟、复位电源管理 – 1.8 V 到 3.6 V 供电和 I/O – POR、 PDR、 PVD 和 BOR – 4 至 26 MHz 晶振 – 内置经工厂调校的 16 MHz RC 振荡器( 1% 精度) – 带校准功能的 32 kHz RTC 振荡器 – 内置带校准功能的 32 kHz RC 振荡器 5、低功耗 – 睡眠、停机和待机模式 – VBAT 可为 RTC、 20×32 位备份寄存器 + 可选的 4 KB 备份 SRAM 供电 6、3 个 12 位、 2.4 MSPS ADC:多达 24 通道,三重交叉模式下的性能高达 7.2 MSPS 7、2 个 12 位 D/A 转换器 8、通用DMA:具有FIFO和突发支持的16路DMA控制器 9、多达17个定时器: 12个16位定时器,和2个频率高达 168 MHz 的 32 位定时器,每个定时器都带有 4 个输入捕获 / 输出比较 /PWM,或脉冲计数器与正交 ( 增量 ) 编码器输入 10、调试模式 – SWD & JTAG 接口 – Cortex-M4 跟踪宏单元 ™ 11、多达 140 个具有中断功能的 I/O 端口 –高达 136 个快速 I/O,最高 84 MHz – 高达 138 个可耐 5 V 的 I/O 12、多达 15 个通信接口 – 多达 3 个 I2C 接口 (SMBus/PMBus) – 高达 4 个 USART/4 个 UART( 10.5 Mbit/s、ISO7816接口、 LIN、 IrDA、 调制解调器控制) – 高达 3 个 SPI ( 42 Mbits/s), 2 个具有复用的全双工 I2S, 通过内部音频 PLL 或外部时钟达到 音频级精度 – 2 个 CAN ( 2.0B 主动)以及 SDIO 接口
焊台支持hakko t12烙铁头和返修台858D。 硬件组件: hakko FX-9501手柄,用于T12吸头× 1个 热风枪手柄858D× 1个 GX12-5航空插头× 1个 GX16-8航空插头× 1个 STM32蓝色药丸板× 1个 OLED显示屏1.5英寸7pin SPI× 1个 DC-DC降压转换器24-> 5v,3A× 1个 EEPROM AT24C32A× 1个 Microchip轨到轨输入/输出双路运算放大器× 2 AMS 1117稳压器3.3v× 1个 IRF9540 MOSFET× 2 FR107快速恢复二极管× 2 通用晶体管NPN× 3 蜂鸣器× 1个 DB207桥式整流器× 1个 BTA41-600B双向可控硅× 1个 MOC3052× 1个 4N25M× 1个 电容1000 µF× 1个 电容器100 µF× 1个 电容器1uF× 2 电容器0.01uF 630v× 1个 电容器100 nF× 6 0.1欧姆2W电阻× 1个 1欧姆2W电阻× 1个 39欧姆1W电阻× 1个 电阻100欧姆× 3 电阻220欧姆× 1个 电阻330欧姆× 1个 470欧姆× 4 电阻1k欧姆× 5 电阻10k欧姆× 5 33 kOhm电阻× 2 电阻100k欧姆× 3 470k电阻× 1个 500k多圈电位计× 2 倾斜开关× 1个 齐纳单二极管,3.3 V× 1个 齐纳18v二极管× 2 NTC型热敏电阻× 1个 带按钮的旋转编码器× 1个 软件应用程序和在线服务: 意法半导体STM32CUBEPROG STM32系统工作台免费软件 手动工具和制造机: 烙铁(通用) 这是用于Hakko T12烙铁头的烙铁控制器和基于STM32微控制器的858D返修台的组合版本。因此,控制器支持同时使用这两种设备。希望对像我这样的许多发烧友有用。 该项目具有以下功能: 控制器允许使用热风枪或烙铁。可以通过硬件模式开关选择工作模式。 热风枪由整个正弦半周期电压峰值供电,并且不会干扰交流电源插座。 该控制器使用7引脚SPI 或 I2C接口支持基于SD1306芯片的单个 OLED显示屏。无需其他重新编译或代码修改。如果在启动过程中在I2C总线上找到OLED显示屏,则将使用它。否则,控制器将初始化SPI总线。 控制器通过测试流过烙铁头的电流来检查烙铁头是否已连接。如果笔尖未连接到熨斗手柄,则错误消息将显示在主屏幕上。此功能允许快速更换针尖程序。当烙铁断电并从手柄上拆下烙铁头时,将启动“更换烙铁头”程序。 在为热风枪加热器通电之前,控制器检查热风枪是否已连接并且其风扇是否正常工作。这增加了控制器的安全性。 控制器将保持热风枪风扇在低功率下工作,直到变冷为止。 控制器使用环境温度(FX9501手柄内部或控制器的情况下的传感器)校正通过热电偶测得的烙铁头温度。 控制器支持通过200、260、330和400摄氏度的四个参考点对尖端进行单独校准。 控制器支持通过200、300、400和500摄氏度的四个参考点对热风枪进行校准。 控制器中执行了专用的校准程序,以简化喷嘴或热风枪的校准过程。 控制器使用20 HZ PWM信号来控制向焊嘴供电。这使控制器保持静音。 PID算法用于管理向烙铁或热风枪提供的功率。这样可以使预设温度保持非常稳定。 控制器中实现了加速旋转编码器算法,可以快速进行更改。 温度可以以两个摄氏度显示:摄氏度或华氏度。 如果不活动,控制器将执行自动关机程序。 使用可选的硬件倾斜开关实现待机(低功耗)模式。 U8g2图形库在控制器中实现。 电路城原创内容,未经同意,不得转载!
项目简介: 使用WP3W-RK套件实现低功耗远距离门禁卡系统的供电。套件发射部分输入电源使用标准USB2.0供电,对接收部分的电源输出使用线性降压实现对低电压低功耗门禁卡系统的供电;远距离门禁卡系统使用非接触分时段通讯,拥有中断睡眠模式可实现低功耗,使用板载高Q值,高谐振天线,感应距离高达65mm,适用于多种复杂场合,识别响应速度快,穿透效果好。 硬件说明: 硬件框图如下图所示,包括以下四个部分:供电部分,RFID门禁读卡部分,RFID门禁写卡部分,PC上位机部分。 (1)供电部分:使用WP3W-RK无线输电套件;系统采用标准usb2.0 5V输入,对P9235 A-R发射模块供电,无线输电接收模块P9027LP-R输出5V电压,再使用LM1117线性电源IC完成降压3.3V,可满足门禁系统供电需要。 (2)RFID门禁读卡部分:完成对RFID卡的卡号读取,ROM加密读取,实现开关门;此部分使用STM32F103 MCU作为主控,以SPI串行总线控制MF RC522 13.56MHz读写卡IC完成S50卡的卡号读取,使用232串行通信向PC端上传卡号,并读取PC返回数据来确定电磁门开关状态(此处用LED替代)。 (3)RFID门禁写卡部分:完成对RFID卡的卡号读取,ROM加密写入,数据库存储;此部分使用STM32F103 MCU作为主控,以SPI串行总线控制MF RC522 13.56MHz读写卡IC完成S50卡的卡号读取,并向PC端上传卡号,并读取PC返回数据来更改卡内ROM存储信息,显示写卡状态。 (4)PC上位机部分:完成用户卡号数据存储,MCU通讯管理;通讯用USB转串口IC PL2303电平转换完成与MCU通讯,并完成卡号和用户的数据库存储和调用,实现信息同步,是整个系统的人机交互部分。 部分硬件电路图见附件。 软件说明: 软件框图如下图所示,包括以下三个部分:RFID门禁读卡部分,RFID门禁写卡部分,PC上位机部分。 MCU软件的编辑,编译使用Keil5 MDK-ARM开发平台,可方便实现Cortex_M3内核开发和调试;系统部分运行代码见附件。 演示效果: 系统功能框图如下图所示: PCB 3D图如下图所示: 演示效果情况只能用模块来完成了,效果如下: https://www.elecfans.com/uploads/project/file/20171025/img_20171025221649.mp4 【转载自电子发烧友】
STM32CubeMX中,您可以使用以下几种方式来实现低功耗设计: 1. 选择合适的功耗模式:在CubeMX的配置选项卡中,您可以选择适合您应用需求的功耗模式。例如,选择低功耗运行模式(Low-power run mode)或者低功耗睡眠模式(Low-power sleep mode)。 2. 配置时钟源:通过选择适当的时钟源和时钟频率,可以降低系统的功耗。在CubeMX的时钟配置选项卡中,您可以配置主时钟源和外设时钟源,以满足您的功耗需求。 3. 优化外设配置:在CubeMX的外设配置选项卡中,您可以根据实际需求禁用或者配置外设,以减少不必要的功耗消耗。 4. 使用低功耗模式:对于支持低功耗模式的外设,您可以在CubeMX的外设配置选项卡中启用相应的低功耗模式。例如,对于串口外设,您可以启用低功耗睡眠模式,以降低功耗。 5. 配置唤醒源:在CubeMX的电源配置选项卡中,您可以配置唤醒源,以确定系统何时从低功耗模式中唤醒。根据实际需求,您可以选择外部中断、定时器或者其他事件作为唤醒源。 6. 使用低功耗驱动库:STMicroelectronics提供了一些低功耗驱动库,可以在CubeMX中启用。这些驱动库提供了一些特定外设的低功耗控制功能,可以帮助您实现更精细的功耗管理。 以上是一些在STM32CubeMX中实现低功耗设计的常见方法。通过合理配置和优化,您可以实现低功耗STM32应用。请注意,具体的配置选项和功能可能会根据不同的STM32系列和型号而有所差异,建议您参考相应的技术文档和参考手册以获取更详细的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值