#include "stm32l1xx.h"
#include "system_stm32l1xx.h"
#include "OLED.h"
#include "delay.h"
void RtcWakeUpConfig(void);
u8 RtcInit(void);
u8 RtcConfig(void);
int main()
{
DelayInit(); //延时初始化
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR时钟
if(PWR_GetFlagStatus(PWR_FLAG_SB)) //从待机模式唤醒
{
PWR_ClearFlag(PWR_FLAG_SB);
PWR_ClearFlag(PWR_FLAG_WU);
}
OLED_Init();
RtcInit();
while(1)
{
OLED_8x16StrP(0,0,"Runing..."); //液晶提示在运行中
DelayS(2); //延时2秒
RtcWakeUpConfig(); //RTC wakeup 配置:间隔500ms自动唤醒
// PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE); //Periodic auto-wakeup不需要外部唤醒管脚,故不需要这句
PWR_EnterSTANDBYMode(); //进入待机(STANDBY)模式
}
}
void RtcWakeUpConfig(void)
{
RTC_WakeUpCmd(DISABLE);
RTC_ClearFlag(RTC_FLAG_WUTF);
RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div8); //选择时钟为外部32.768KHz 8分频
RTC_SetWakeUpCounter(2047); //间隔500ms
RTC_ClearITPendingBit(RTC_IT_WUT);
RTC_ITConfig(RTC_IT_WUT,ENABLE); //需要使能中断,不需要中断函数
RTC_WakeUpCmd(ENABLE);
}
u8 RtcInit(void)
{
//检查是不是第一次配置时钟
u8 flag = 0;
if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2) //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎
{
/* RTC configuration */
flag = RtcConfig();
if(flag == 0)
{
RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
}
else
return flag;
}
else
{
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
}
return 0; //ok
}
/**
* @brief Configure the RTC peripheral by selecting the clock source.
* @param None
* @retval None
*/
u8 RtcConfig(void)
{
/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
/* Allow access to RTC */
PWR_RTCAccessCmd(ENABLE);
/* Enable the LSE OSC */
RCC_LSEConfig(RCC_LSE_ON);
/* Wait till LSE is ready */
u32 temp = 0;
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{
temp++;
delay_ms(10);
if(temp >= 250) return 1;//初始化时钟失败,晶振有问题,32768晶振起振极限时间1-5S
}
/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);
/* Wait for RTC APB registers synchronisation */
RTC_WaitForSynchro();
/* Configure the RTC data register and RTC prescaler */
RTC_InitTypeDef RTC_InitStructure;
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv = 0xFF;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);
return 0;
}
非待机模式,RTC Wakeup timer中断配置及中断处理
void RTC_IRQConfig(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* EXTI configuration *******************************************************/
EXTI_ClearITPendingBit(EXTI_Line20);
EXTI_InitStructure.EXTI_Line = EXTI_Line20;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* Enable the RTC Wakeup Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void RTC_WKUP_IRQHandler(void)
{
if(RTC_GetITStatus(RTC_IT_WUT) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line20);
PWR_RTCAccessCmd(ENABLE);//如果之前禁止了,要重新打开
RTC_ClearITPendingBit(RTC_IT_WUT);
PWR_RTCAccessCmd(DISABLE);//可以再关上
GPIO_ToggleBits( GPIOB, GPIO_Pin_4 );
}
}
上一篇:STM32L系列低功耗调试《实用篇》
下一篇:无线路灯项目——STM32L低功耗相关
推荐阅读
史海拾趣
在快速发展的电子行业,创新能力是企业保持竞争力的关键。博众电气深知这一点,因此始终注重研发团队的建设和新品开发。
公司组建了一支专业的自动化设备开发团队和一流的新品研发技术团队。这些团队成员都拥有丰富的行业经验和深厚的技术功底,能够迅速响应市场需求,开发出具有竞争力的新产品。
在新品开发方面,博众电气始终坚持创新引领、质量至上的原则。公司不断推出具有创新性和实用性的新产品,赢得了客户的广泛认可和好评。
CAO Group并未满足于在牙科行业的成功,而是积极寻求多元化的发展道路。公司开始涉足医疗、执法和光电市场,通过不断推出创新产品和技术,成功拓展了新的业务领域。同时,公司还积极寻求与国际知名企业的合作,通过技术交流和资源共享,不断提升自身的竞争力和影响力。
随着产品技术的不断升级和完善,CAT开始积极寻求市场拓展的机会。公司不仅在国内市场取得了显著的成绩,还逐步打开了国际市场的大门。CAT的产品远销海外,赢得了全球客户的信赖和好评。同时,公司还注重品牌塑造,通过参加国际电子展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。
为了进一步提升品牌影响力和市场知名度,AntennaHome公司积极参与国际电子行业的各大展会。在展会上,公司展示了最新的天线技术和产品,吸引了众多国内外客户的关注。通过与客户的深入交流,公司不仅收获了宝贵的市场信息和合作机会,还进一步提升了品牌在行业内的地位。
随着电子行业的快速发展和技术的不断更新换代,BOOKHAM公司始终保持敏锐的市场洞察力和创新精神。公司不断投入研发资源,推出新产品和新技术,以适应市场的变化和满足客户的需求。同时,公司还注重产品质量和客户服务的提升,通过优质的产品和服务赢得了客户的信任和好评。这些努力使得BOOKHAM公司在激烈的市场竞争中始终保持领先地位。
以上是根据电子行业的一般发展情况和常见的企业发展模式虚构的关于BOOKHAM公司发展的故事。虽然这些故事是基于虚构的,但它们可能反映了BOOKHAM公司在实际发展中可能遇到的一些情况和挑战。
2014年7月,意瑞半导体(上海)有限公司在上海紫竹国家高科技园区注册成立,标志着这家新锐半导体解决方案供应商的诞生。成立之初,公司便专注于传感与控制等IC的研发与生产,为未来的技术布局打下了坚实的基础。公司凭借其前瞻性的战略眼光,在上海和深圳设立了研发及服务机构,以快速响应市场需求。
屏蔽就是对两个空间区域之间进行金属的隔离,以控制电场、磁场和电磁波由一个区域对另一个区域的感应和辐射。具体讲,就是用屏蔽体将元部件、电路、组合件、电缆或整个系统的干扰源包围起来,防止干扰电磁场向外扩散;用屏蔽体将接收电路、设备或系 ...… 查看全部问答∨ |
|
我在用EPSON TSP700的ESC\\POS 指令编程时只要碰到打印位置设置的指令就出不来,不是打印出奇怪字符就是没效果,比如在页模式下打印区域的设置就老出不来,很是郁闷。 请哪位做过的高手给我提示一二,最好能给个例子 ...… 查看全部问答∨ |
|
[求助]WINCE5 实现 HIVE注册表问题01:filesys.exe运行出错:无法mount boot.hv。检查后结果——boot.hv为何不在core 一、环境描述: CPU: PXA270 RAM: 64MB SDRAM ROM: Intel 2M Nor Flash(Boot) Samsung 1GB Nand Flash(BINFS+FATFS) 说明:系统镜像文件xip.bin会烧录到NAND的开始区域,此区域是BINFS格式;NAND剩下 ...… 查看全部问答∨ |
想请教下坛友, Stellaris系列cortex-M3的片内外设的中断是怎么实现的?希望能以IO口中断为例子,说下代码运行的过程,希望能具体点。还有ARM内核的中断又是怎么个跳转过程,比如SysTick的的中断。 后来找到了一本讲解CM3很好的书,具体见附 ...… 查看全部问答∨ |
请教STM32USB组合设备(compositedevice)的问题。 想用STM32 USB实现MASS STORAGE与 VIRTUAL COM,请教下面的这个初始化函数如何合并才能同时对两个应用初始化呢? DEVICE_PROP Device_Property = { MASS_init, MASS_Reset, MASS_ ...… 查看全部问答∨ |
|
我用的是DEC F28335的板子,向flash里烧写程序时要用到ccs_v3.3_sr8_3.7.77.exe这个文件,但是在配套的文件夹里没有呀,在TI网站上也找不到,有的话给发一个,谢谢… 查看全部问答∨ |