STOP状态下通过串口唤醒MCU

发布者:oplkjjj最新更新时间:2018-08-19 来源: eefocus关键字:STOP状态  串口  唤醒MCU 手机看文章 扫描二维码
随时随地手机看文章

/*
STOP状态下通过串口唤醒MCU
唤醒机制:在MCU进入STOP状态后,不能直接通过UART等外设唤醒,
在MCU进入STOP前将RX脚设为EXTI模式,并使能对应的中断。 
*/
/***************************************************************************************
** 函数名称: main
** 功能描述: 起始入口
**--------------------------------------------------------------------------------------
** 修 改 人: 
** 日   期: 
**--------------------------------------------------------------------------------------
****************************************************************************************/
int main(void) 

System_Init(); 
PWR_DeInit(); 
UART_Init(); 
Global_Variables_Init();
while(1) 

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI); 


/***************************************************************************************
** 函数名称: EXTIX_Init
** 功能描述: 把RX改为EXTI,允许中断
** 参    数: None
** 返 回 值: None       
** 作   者: WEN(wenshijian4@163.com,QQ214490357)
** 日   期: 2015年09月17日
**--------------------------------------------------------------------------------------
** 修 改 人: 
** 日   期: 
**--------------------------------------------------------------------------------------
****************************************************************************************/
void EXTIX_Init(void) 

EXTI_InitTypeDef EXTI_InitStructure; 
NVIC_InitTypeDef NVIC_InitStructure; 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource11); 
EXTI_InitStructure.EXTI_Line=EXTI_Line11;
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_IRQChannel; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure); 



/******************************************************************************* 
* Function Name : EXTI15_10_IRQHandler 
* Description : 位于stm32f10x_it.c
* Input : None 
* Output : None 
* Return : None 
*******************************************************************************/ 
void EXTI15_10_IRQHandler(void) 

EXTI_ClearITPendingBit(EXTI_Line11); 
NVIC_GenerateSystemReset(); 

/***************************************************************************************
** 函数名称: PWR_EnterSTOPMode
** 功能描述: 调整寄存器,进入STOP模式
** 参    数: 
** 返 回 值: None       
** 作   者: WEN(wenshijian4@163.com,QQ214490357)
** 日   期: 2015年09月17日
**--------------------------------------------------------------------------------------
** 修 改 人: 
** 日   期: 
**--------------------------------------------------------------------------------------
****************************************************************************************/
void PWR_EnterSTOPMode(u32 PWR_Regulator, u8 PWR_STOPEntry) 

u32 tmpreg = 0; 
EXTIX_Init(); 


/* Select the regulator state in STOP mode ---------------------------------*/ 
tmpreg = PWR->CR; 
/* Clear PDDS and LPDS bits */ 
tmpreg &= CR_DS_Mask; 
/* Set LPDS bit according to PWR_Regulator value */ 
tmpreg |= PWR_Regulator; 
/* Store the new value */ 
PWR->CR = tmpreg; 
/* Set SLEEPDEEP bit of Cortex System Control Register */ 
*(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPDEEP_Set; 
/* Select STOP mode entry --------------------------------------------------*/ 
if(PWR_STOPEntry == PWR_STOPEntry_WFI) 

/* Request Wait For Interrupt */ 
__WFI(); 

else 

/* Request Wait For Event */ 
__WFE(); 


/***************************************************************************************
** 函数名称: UART_Init
** 功能描述: 串口初始化
** 参    数: None
** 返 回 值: None       
** 作   者: WEN(wenshijian4@163.com,QQ214490357)
** 日   期: 2015年09月17日
**--------------------------------------------------------------------------------------
** 修 改 人: 
** 日   期: 
**--------------------------------------------------------------------------------------
****************************************************************************************/
void UART_Init(void) 

GPIO_InitTypeDef GPIO_InitStructure; 
USART_InitTypeDef USART_InitStructure; 
NVIC_InitTypeDef NVIC_InitStructure; 
/* Enable USART3 clock */ 
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART3, ENABLE); 
// GPIO Settings for USART3 
// PB10: TXD_ROOM 
GPIO_StructInit(&GPIO_InitStructure); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure); 
// PB11: RXD_ROOM 
GPIO_StructInit(&GPIO_InitStructure); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
GPIO_Init(GPIOB, &GPIO_InitStructure); 


USART_DeInit(USART3); 
USART_InitStructure.USART_BaudRate =9600; 
USART_InitStructure.USART_WordLength = USART_WordLength_9b; 
USART_InitStructure.USART_StopBits = USART_StopBits_2; 
USART_InitStructure.USART_Parity = USART_Parity_Even; 
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; 
USART_Init(USART3, &USART_InitStructure); 
UartRxON(); 
// In initial state, waiting for indoor data... 
USART_ITConfig(USART3, USART_IT_TXE, DISABLE); 
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); 
UART_State=UART_RX; //0; // 0: received state 1: transmit state 
/* Enable the USART3 Interrupt */ 
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQChannel; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure); 
/* Enable USART3 */ 
USART_Cmd(USART3, ENABLE); 

关键字:STOP状态  串口  唤醒MCU 引用地址:STOP状态下通过串口唤醒MCU

上一篇:STM32在外部32Mhz晶振下的时钟配置方法
下一篇:stm32l476 内部flash HAL库操作方法

推荐阅读最新更新时间:2024-03-16 16:11

51单片机---串口通讯
一、简介 MCS-51单片机内部有一个可编程的双向全双工串行通信接口,简称串口;该串口有4种工作方式,以适用于不同场合;其波特率由单片机内部的定时器/计数器产生,可由软件设置;接收和发送均可工作在查询模式和中断模式,比较灵活; 二、串口结构与控制 MCS-51单片机内部的串口拥有两个物理上相互独立的接收、发送缓冲器SBUF,可以同时接收和发送数据;发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入;两个缓冲器占用同一个地址(99H);控制MCS-51单片机串口的寄存器有两个SCON和PCON; 1、串口工作方式控制寄存器SCON(99H) 如下图: (1)、SM0和SM1:控制单片机的工作方式; (2)、SM2:允许方式
[单片机]
51<font color='red'>单片机</font>---<font color='red'>串口</font>通讯
u-boot移植(六)---代码修改---串口
一、代码流程 1.1 串口代码   程序流程图如下;      default_serial_console 执行的代码如下:         在JZ2440.H中有如下定义:      则执行结构体s3c24xx_serial0_device,从而执行INIT_S3C_SERIAL_STRUCTURE(0, s3ser0 ):      _serial_setbrg 为串口时钟设置函数:      其中,调用get_PCLK()进行串口时钟的设置:      PCLK的计算涉及到 HCLK,在函数中调用了get_HCLK() 来获取HCLK的值。      get HCLK的代码就HCLK的计算,这里对应着寄存器
[单片机]
u-boot移植(六)---代码修改---<font color='red'>串口</font>
stm32串口1和RS485通信的串口2的配置
stm32串口1的配置 #if EN_USART1_RX //如果使能了接收 //串口1中断服务程序 //注意,读取USARTx- SR能避免莫名其妙的错误 u8 USART_RX_BUF ; //接收缓冲,最大USART_REC_LEN个字节. //接收状态 //bit15, 接收完成标志 //bit14, 接收到0x0d //bit13~0, 接收到的有效字节数目 u16 USART_RX_STA=0; //接收状态标记 void uart_init(u32 bound){ //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_In
[单片机]
串口扩展并口驱动数据管显示
A:利用串口工作方式0(同步移位寄存器方式)注意::将串行口工作方式设为方式0,将要显示的数据写入SBUF,单片机会自动启动数据发送过程,将要发送的数据按从低位到高位的顺序发送到Q7~Q0,先发送低位的,发送结束后,Q7中是发送的数据的最低位,Q0是发送的数据的最高位。 #include reg52.h #include intrins.h typedef unsigned char uchar; void intx(); uchar code led_table ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,
[单片机]
<font color='red'>串口</font>扩展并口驱动数据管显示
单片机IO口模拟UART串口通信
为了让大家充分理解 UART 串口通信的原理,我们先把 P3.0 和 P3.1 当做 IO 口来进行模拟实际串口通信的过程,原理搞懂后,我们再使用寄存器配置实现串口通信过程。 对于 UART 串口波特率,常用的值是 300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200 等速率。IO 口模拟 UART 串行通信程序是一个简单的演示程序,我们使用串口调试助手下发一个数据,数据加 1 后,再自动返回。 串口调试助手,这里我们直接使用 STC-ISP 软件自带的串口调试助手,先把串口调试助手的使用给大家说一下,如图 11-6 所示。第一步要选择串口助手菜单,第二步
[单片机]
<font color='red'>单片机</font>IO口模拟UART<font color='red'>串口</font>通信
STM32用串口(USB串口)下载程序的方法
一、 STM32串口下载程序步骤 1)安装《CH340驱动(USB串口驱动)_XP_WIN7共用》 2)打开串口下载软件《STM32F4串口下载软件(FLYMCU)》 3)开发板USB接口连接到电脑USB口,给开发板供电 4)下载软件设置如下;点搜索串口,选择正确的串口号,波特率不用管,选择HEX文件,点开始编程就可以下载了。 二、 硬件连接 USB转串口CH340接线图如下。 ARM串口TXD连接到CH340G的RXD脚,RXD连接到CH340G的TXD脚; CH340是5V供电,可以由USB供电。boot0置1(接到3.3V) ,boot1置0(接地)。 三、说明:对于已加密的STM32芯片可以通过串口下载程序来解锁下
[单片机]
51串口 单片机上接收数据程序
#include reg51.h #include stdio.h #define uchar unsigned char #define uint unsigned int //sbit BEEP = P1; // P1接8个LED unsigned char Receive(void) { unsigned char dat; while(RI==0) //只要接收中断标志位RI没有被置 1 当接收完毕时,中断标志RI被置1 ; //等待,直至接收完毕(RI=1) RI=0; //为了接收下一帧数据,需将RI清0 dat=SBUF; //将接收缓冲器中的数据存于dat return dat; } vo
[单片机]
ARM7串口9位方式多机通信的编程技术
   1 主从式多机通信   所谓主从式多机系统,即在数个ARM(或单片机)中,有一个是主机,其余的为从机。从机要服从主机的调度、支配,其拓扑结构如图1所示。   主机信息可以发到各个从机,从机发送的信息只能被主机接收,从机之间不进行通信。   51单片机串口不同寻常的特征是包括第9位方式(在串口模式2和模式3下)。它允许把在串行口通信增加的第9位用于标志特殊字节的接收。一般约定第9位为高时表示该字节为地址字节,第9位为低时为数据字节。第9位方式允许接收单片机信息,仅当字节具有一个第9位时才能被中断。用这种方式,主机首先广播1字节,并让其第9位为高,同时收到该字节的各个从机,只有地址相符的打开,以接收后面的数据字节。所接
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved