基于STM32通过RTC唤醒低功耗模式

2023-11-16

一、低功耗模式

1.简介

通俗的来讲低功耗模式就是降低单片机的运行功耗

STM32F10xxx有三种低功耗模式:
(1)睡眠模式 (Cortex™-M3 内核停止,所有外设包括 Cortex-M3 核心的外设,如 NVIC 、系统时
(SysTick) 等仍在运行 )
(2)停止模式 ( 所有的时钟都已停止 )
(3)待机模式 (1.8V 电源关闭 )
此外,在运行模式下,可以通过以下方式中的一种降低功耗:
(1)降低系统时钟
(2)关闭 APB AHB 总线上未被使用的外设时钟。
这里以停止模式为例来讲解
        

2.进入STOP模式

要想进入停止模式,我们只需调用固件库的函数:
        
/*
    入口参数:
        PWR_Regulator_LowPower:低功耗模式进入
        PWR_STOPEntry_WFI     : WFI进入,任意外部中断退出
*/
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI)
执行完这一句后就能进入停止模式,进入STOP模式后程序就会停在这个位置不会再往下跑了,当我们通过外部中断来退出STOP模式后,程序开始从当前位置的下一句运行起来。

3.退出STOP模式

     这里我们通过一个外部中断来退出STOP模式,我们采用串口的接收引脚通过发送数据产生引脚的电平变化来触发外部中断产生,从而退出STOP模式

具体配置代码如下

u8 UART1_RECEIVE_OK = 0;		//UART1中断接收完成标志位  	
u8 UART1_RECEIVE_DATA[200]; //UART1接收缓存
u8 UART1_SEND_DATA[200];		//UART1发送缓存
u8 R_COUNT = 0;
/*
    串口1初始化
*/
void USART1_Init(u32 bound)
{
	//GPIO端口设置
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);	//使能USART1,GPIOA时钟

	//USART1_TX   GPIOA.9
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

	//USART1_RX	  GPIOA.10初始化
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10  

	//Usart1 NVIC 配置
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;		//子优先级3
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器

	//USART 初始化设置

	USART_InitStructure.USART_BaudRate = bound;//串口波特率
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
	USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
	USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式

    USART_Init(USART1, &USART_InitStructure); //初始化串口1
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
    USART_Cmd(USART1, ENABLE);                    //使能串口1 

}

/*
    串口1中断
*/
void USART1_IRQHandler(void)                	//串口1中断服务程序
{

	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//判断是否为接收中断
	{
		UART1_RECEIVE_DATA[R_COUNT] =  USART_ReceiveData(USART1);
		//USART_SendData(USART1,UART1_RECEIVE_DATA[R_COUNT]);
		R_COUNT++;
	
	}
	if(R_COUNT == 199)
	{
		R_COUNT = 0;
	}
	UART1_RECEIVE_OK = 1;
} 

/*
	外部中断初始化
*/
void exti_init(void)
{
	EXTI_InitTypeDef EXTI_InitStructure;
 	NVIC_InitTypeDef NVIC_InitStructure;
	
  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);			    //使能复用功能时钟	
	
  	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource10);
  	EXTI_InitStructure.EXTI_Line=EXTI_Line10;					    //串口1 RX
  	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;			
  	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;		    //下降沿触发
  	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  	EXTI_Init(&EXTI_InitStructure);	 

    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//外部中断线10
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2, 
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;			//子优先级2
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;					//使能外部中断通道
  	NVIC_Init(&NVIC_InitStructure);	
	
}

/*
	外部中断
*/
void EXTI15_10_IRQHandler(void)
{
	EXTI_ClearITPendingBit(EXTI_Line10); //清除LINE 10 上的中断标志位

}
这里我们初始化了串口1,然后初始化了外部中断的线10 对应串口1的接收引脚PA10,当我们通过串口工具发送数据时就会产生一个外部中断,从而来退出STOP模式

二、RTC实时时钟

1.简介

实时时钟是一个独立的定时器。RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。
● 可编程的预分频系数:分频系数最高为 2 20
32 位的可编程计数器,可用于较长时间段的测量。
2 个分离的时钟:用于 APB1 接口的 PCLK1 RTC 时钟 (RTC 时钟的频率必须小于 PCLK1 时钟
频率的四分之一以上 )
● 可以选择以下三种 RTC 的时钟源:
HSE 时钟除以 128
LSE 振荡器时钟;
LSI 振荡器时钟 ( 详见 6.2.8
308/754
RTC 时钟 )
2 个独立的复位类型:
APB1 接口由系统复位;
RTC 核心 ( 预分频器、闹钟、计数器和分频器 ) 只能由后备域复位 ( 详见 6.1.3 )
3 个专门的可屏蔽中断:
闹钟中断,用来产生一个软件可编程的闹钟中断。
秒中断,用来产生一个可编程的周期性中断信号 ( 最长可达 1 )
溢出中断,指示内部可编程计数器溢出并回转为 0 的状态。

2.RTC实时时钟的使用

RTC可以使用外部时钟源,即在低功耗模式下依然能够正常运行

在第一节中讲了外部中断来退出STOP模式,那是需要我们主动去操作来产生一个外部中断,而RTC可以定时来自动产生外部中断从而退出STOP模式

从简介中我们知道RTC有三个专门的中断,我们常用的就是秒中断和闹钟中断,这里闹钟中断发生时会产生一个外部中断,我们可以从STM32中文参考手册中外部中断事件章节得知

3.配置RTC

下面直接上代码

rtc.c

#include "rtc.h"
#include "sys.h"
		    

/*
	RTC初始化
*/
u8 RTC_Init(void)
{
	//检查是不是第一次配置时钟
	u8 temp=0;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);	//使能PWR和BKP外设时钟   
	PWR_BackupAccessCmd(ENABLE);	//使能后备寄存器访问  
			
	BKP_DeInit();	//复位备份区域 	
	RCC_LSEConfig(RCC_LSE_ON);	//设置外部低速晶振(LSE),使用外设低速晶振
	while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)	//检查指定的RCC标志位设置与否,等待低速晶振就绪
	{
		temp++;
		delay_ms(10);
	}
	if(temp>=250)
		return 1;//初始化时钟失败,晶振有问题	   
		
	RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);		//设置RTC时钟(RTCCLK),选择LSE作为RTC时钟    
	RCC_RTCCLKCmd(ENABLE);						//使能RTC时钟  
	RTC_WaitForSynchro();		//等待RTC寄存器同步 
	RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成	
	
	RTC_ITConfig(RTC_IT_ALR, ENABLE);		//使能RTC时钟中断
 	
	RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成
	RTC_EnterConfigMode();/// 允许配置	
	
	RTC_SetPrescaler(32767); //设置RTC预分频的值
	RTC_SetCounter(0);       // 这里的设置,每设置一次就要等待写操作完成 
	RTC_WaitForLastTask();	 //等待最近一次对RTC寄存器的写操作完成	
	RTC_SetAlarm(5);         // 设置闹钟的时间要加1哦,也就是说现在是5S
	RTC_WaitForLastTask();	//等待最近一次对RTC寄存器的写操作完成	
	RTC_ExitConfigMode();   //退出配置模式  
	RTC_NVIC_Config();      //RCT中断分组设置		    				     
	
	return 0; //ok
}	

void RTC_NVIC_Config(void)
{	
    NVIC_InitTypeDef NVIC_InitStructure;
	EXTI_InitTypeDef EXTI_InitStructure;
	
	//EXTI17配置
	EXTI_InitStructure.EXTI_Line = EXTI_Line17;         // RTC闹钟为外部中断17
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStructure);
	
	// 时钟中断配置
	NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn;		//RTC全局中断
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	//先占优先级1位,从优先级3位
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;	//先占优先级0位,从优先级4位
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;		//使能该通道中断
	NVIC_Init(&NVIC_InitStructure);		//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
}



/*
	RTC闹钟中断函数,当RTC计数器的值和闹钟设定的一样时,触发这个函数
*/
void RTCAlarm_IRQHandler(void)
{
	printf("RTC ALARM INTERRUPT\r\n");
	if(RTC_GetITStatus(RTC_IT_ALR)!= RESET)//闹钟中断
	{
		RTC_SetCounter(0);	    // 清除RTC计数器,从新开始计数
		RTC_WaitForLastTask();
		RTC_SetAlarm(10);	    // 设置闹钟 设置闹钟的时间要加1哦,,也就是说现在是11S
		RTC_WaitForLastTask();	  
	}
	
	RTC_ClearITPendingBit(RTC_IT_ALR);		//清闹钟中断
	EXTI_ClearITPendingBit(EXTI_Line17);     //闹钟事件发生,会产生一个EXTI_17外部中断,此标志位要清除,否则下次停止模式进入失败
	RTC_ClearITPendingBit(RTC_IT_OW);		//清闹钟中断
	RTC_WaitForLastTask();	  	    		
}

 这里我们配置了RTC的初始化和闹钟中断,每次产生闹钟中断我们便打印一句话来测试

main.c

#include "stm32f10x.h"
#include "sys.h"

extern u8 UART1_RECEIVE_OK;
extern u8 UART1_RECEIVE_DATA[200];
extern u8 R_COUNT;

/*
	进入STOP模式
*/
void Enter_Stop_Mode()
{
	printf("enter stop mode\r\n");
	PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);  //进入STOP停机模式
	SystemInit();	//系统初始化
	delay_ms(10);
	printf("wake up\r\n");
}

 int main(void)
 {	

	 USART1_Init(115200); //初始化串口
	 exti_init();		  //初始化外部中断
	 delay_init();		  //初始化延时
	 delay_ms(1000);
	 RTC_Init();		  //RTC初始化

	 Enter_Stop_Mode();

	 while(1)
	 {
		delay_ms(1000);
		printf("running now\r\n");
		
		if(UART1_RECEIVE_OK) //发送串口中断
		{
			UART1_RECEIVE_OK = 0;
			if(UART1_RECEIVE_DATA[0] == 0xaa) //如果收到0xaa则进入stop模式
			{
				Enter_Stop_Mode();
				UART1_RECEIVE_OK = 0;
			}
			R_COUNT = 0;
		}
	 }
	 
 }
在主函数中我们上电就进入STOP模式,这时候程序不会进到while里去而是停在了Enter_Stop_Mode(); 这一行,我们配置了RTC闹钟中断为10s发送一次,也就是说等待10s后就退出STOP模式进到while里去
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32通过RTC唤醒低功耗模式 的相关文章

  • 如何在ARMv8-a上启用Aarch32指令集?

    Raspberry Pi 3 使用具有 ARMv8 A53 内核的 Broadcom SoC https www raspberrypi org magpi raspberry pi 3 specs benchmarks 它还使用基于 De
  • 使用 NEON 对 ARM 汇编中的四字向量中的所有元素求和

    我对组装相当陌生 尽管手臂信息中心通常很有帮助 但有时这些说明可能会让新手感到有点困惑 基本上我需要做的就是对四字寄存器中的 4 个浮点值求和 并将结果存储在单个精度寄存器中 我认为 VPADD 指令可以满足我的需要 但我不太确定 你可以尝
  • 是否有专门设计的 C 函数或宏,用于以跨平台方式与汇编指令进行一对一编译以进行位操作?

    我有一个涉及仿真的项目 如果您查看我的帖子历史记录 您会看到我已经走了多远 并且我希望使用 C 进行伪二进制翻译并使用优化器和 或编译器使用 C 代码将我的 switch 语句内容编译为单个汇编指令 主要用于非常标准的指令 例如movs a
  • 对 -finstrument-functions 的未定义引用

    我正在尝试跟踪内核函数并且我正在使用 finstrument functions这样做 但我收到未定义的参考错误 如下所示 arch arm kernel elf c 9 undefined reference to cyg profile
  • ARM NEON:如何实现 256 字节查找表

    我正在使用内联汇编将我编写的一些代码移植到 NEON 我需要的一件事是将范围 0 128 的字节值转换为表中采用完整范围 0 255 的其他字节值 该表很短 但其背后的数学并不容易 因此我认为不值得每次 即时 计算它 所以我想尝试查找表 我
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • ARM 9处理器的opencv交叉编译

    我需要为 ARM 9 处理器交叉编译 opencv 我有处理器的工具链 但不知道如何交叉编译 请告诉我为arm板交叉编译的过程 谢谢大家 看这个参考 http www airs com ian configure configure 5 h
  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • 将结构体偏移属性赋予汇编器

    如何将 C 结构体的偏移量发送到汇编代码 例如 在我的 C 代码中 typedef struct unsigned int a unsigned int b CMyStruct 我向 ASM 函数发送一个 CMyStruct 结构的指针 假
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 使用 ARM NEON 内在函数添加 alpha 和排列

    我正在开发一个 iOS 应用程序 需要相当快地将图像从 RGB gt BGRA 转换 如果可能的话 我想使用 NEON 内在函数 有没有比简单分配组件更快的方法 void neonPermuteRGBtoBGRA unsigned char
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板

随机推荐

  • 程序员技术练级攻略

    原文地址 http coolshell cn articles 4990 html 月光博客6月12日发表了 写给新手程序员的一封信 翻译自 An open letter to those who want to start program
  • 十四、pwm输出实验

    一 pwm的概述 1 pwm的工作原理 图中 假定定时器工作在向上计数 PWM 模式 且当 CNT
  • 论文阅读:BotFinder: A Novel Framework for Social Bots Detection in Online Social Networks Based

    目录 摘要 1 Introduction 3 Our Proposed Method BotFinder 3 1 Overview 3 2 Step1 Feature Engineering 3 3 Step2 Similarity Cal
  • 域名如何部署到正在使用的服务器

    阿里云申请的域名 PHP环境 宝塔工具 一 登录阿里云 对该域名进行解析 二 登录宝塔 添加站点 添加成功后 在改站点下上传你已经做好的页面即可 如果需要FTP操作的 就创建FTP账号密码 创建成功后 直接用FTP账号密码登录即可
  • FaceShifter:新的人脸交换模型

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 如今 深度学习已近在图像合成 图像处理领域中取得惊人的成果 FaceShifter 1 便是其中之一 它是一种深度学习模型 可以非常先进的技术实现人脸交换 在本文中 我们
  • 【2022年高教杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案及代码实现(一)

    1 问题1 对这些玻璃文物的表面风化与其玻璃类型 纹饰和颜色的关系进行分析 结合玻璃的类型 分析文物样品表面有无风化化学成分含量的统计规律 并根据风化点检测数据 预测风化前的化学成分含量 2 问题1的分析 首先需要对玻璃表面风化情况与玻璃类
  • 数据库应用:CentOS 7离线安装PostgreSQL

    目录 一 理论 1 PostgreSQL 2 PostgreSQL离线安装 3 PostgreSQL初始化 4 PostgreSQL登录操作 二 实验 1 CentOS 7离线安装PostgreSQL 2 登录PostgreSQL 3 Na
  • 1:pandas创建DataFrame对象

    实例代码 import pandas as pd df pd DataFrame age 1 2 name 李华 大刘 print df age 和name为列的标题 中括号的为列的内容 前面的这个为索引 如果想以age为索引可以这样写 i
  • myfile

    淄博市公共就业招聘云平台 个人用户使用指导说明 淄博市公共就业招聘云平台是依托Hiturn 海豚 人才网 通过互联网技术 对现场招聘会进行全真模拟 为企业单位用户 个人求职用户搭建 同时支持电脑端与手机端的使用 并可在线交流 信息展示 简历
  • conda的使用教程

    conda的介绍 简单来说 conda软件就是来管理包的软件 以Python为例 在实际生活中 我们要处理多个不同的项目 因此 要安装不同的项目所需要的包 为了管理方便 conda就是用来打理不同项目的包 为不同项目创建不同虚拟环境 把不同
  • 制作HTML5百科页面

    先建一个index html 首页 代码如下 p align center a href page01 html target self img src images index jpg alt 传智播客设计学院UI设计师 a p 首页的效
  • java学习之路——第一次java(java的入门)

    java学习之路 第一次java java的入门 一 什么是java java语言是一种强类型的语言 其中包含一套基本的符号 这些符号构成了java语言的表示符和关键字 是一个跨平台的面向对象的程序设计语言 由Sun Microsystem
  • 离散数学第一章总结

    离散数学第一章 1 公式类型 1 重言式 也是永真式 公式真值恒为1 2 矛盾式 永假式 真值恒为0 3 可满足式 不是矛盾式的就都是可满足式 重言式一定是可满足式 2 成真赋值与成假赋值 也叫成真指派与成假指派 一组原子的取值 真值指派
  • Tensorflow计算、数据和运行模型

    参考书籍 Tensorflow实战Google深度学习框架 郑泽宇等 Tensorflow是一款谷歌开源的深度学习工具 与其他深度学习工具 比如caffe Deeplearning4j等 相比 其受关注度和欢迎程度尤为突出 在谷歌内部 Te
  • 02-Node.js—Buffer(缓冲器)

    文章目录 1 概念 2 特点 3 创建Buffer 3 1 Buffer alloc 3 2 Buffer allocUnsafe 3 3 Buffer from 4 操作Buffer 4 1 Buffer 与字符串的转化 4 2 Buff
  • H264实时编码及NALU,RTP传输

    原文引用地址 http wmnmtm blog 163 com blog static 382457142011920102618122 fromdm fromSearch isFromSearchEngine yes H264实时编码及N
  • linux中find命令详解,Linux下的find指令详解

    在Linux下有很多查找指令 locate whereis which find 在这些查找指令中功能最强大的当属find指令了 find命令在目录结构中搜索文件 并执行指定的操作 Linux下find命令提供了相当多的查找条件 功能很强大
  • linux shell数据重定向(输入重定向与输出重定向)详细分析

    在了解重定向之前 我们先来看看linux 的文件描述符 linux文件描述符 可以理解为linux跟踪打开文件 而分配的一个数字 这个数字有点类似c语言操作文件时候的句柄 通过句柄就可以实现文件的读写操作 用户可以自定义文件描述符范围是 3
  • Vue计算属性:简化数据处理和视图更新的利器

    一 计算属性的基本使用 计算属性 一个特殊属性 值依赖于另外一些数据动态计算出来 计算属性特点 函数内使用的变量改变 重新计算结果返回 注意 计算属性必须定义在computed节点中 计算属性必须是一个function 计算属性必须有返回值
  • 基于STM32通过RTC唤醒低功耗模式

    一 低功耗模式 1 简介 通俗的来讲低功耗模式就是降低单片机的运行功耗 STM32F10xxx有三种低功耗模式 1 睡眠模式 Cortex M3 内核停止 所有外设包括 Cortex M3 核心的外设 如 NVIC 系统时 钟 SysTic