基于STM32F103单片机,使用LL库开发RTC,制作实时时钟并具有闹钟定时功能。

实时时钟的制作请参考上章文章(STM32F1单片机使用HAL库和LL库共同开发RTC实时时钟,解决待机模式24小时日期不变的问题)已经有讲解。
在”rtc.c“中的“MX_RTC_Init”函数的
/* USER CODE BEGIN RTC_Init 1 /和
/
USER CODE END RTC_Init 1 */之间,添加以下程序:如下图

  /* USER CODE BEGIN RTC_Init 1 */
	EXTI_InitStruct.Line_0_31 = LL_EXTI_LINE_17;
    EXTI_InitStruct.LineCommand = ENABLE;
    EXTI_InitStruct.Mode = LL_EXTI_MODE_IT;
    EXTI_InitStruct.Trigger =                                                                                                                                                                                                                                                                                                                                                LL_EXTI_TRIGGER_RISING;
    LL_EXTI_Init(&EXTI_InitStruct);
  /* USER CODE END RTC_Init 1 */

在这里插入图片描述

想要设置闹钟就需要先了解闹钟寄存器与时间寄存器之间的关系:
时间:高:CNTH; 低:CNTL
闹钟:高:ALRH; 低:ALRL

当(ALRH+ALRL)中的数值等于(CNTH+CNTL)中的数值时,触发闹钟事件。

1、首先获取单片机RTC累加计数器的数值,先获取RTC计数寄存器高位CNTH的数值,强转为32位并向左偏移16位.,之后获取RTC计数寄存器低位CNTL的数值,并将其强转为32位,然后与高位相加,得到当前时间转化为秒钟数的个数。
下面展示一些 内联代码片

// A code block
var foo = 'bar';
// An highlighted block
    temp111 = RTC->CNTH;
    temp222 = ((uint32_t)temp111)<<16;
    temp222 = temp222 + (uint32_t)RTC->CNTL;  

2、计算出自己所要设闹钟距离现在还有多少秒,使用刚读取的RTC累加寄存器数值加上此秒数就是闹钟寄存器所要设置的数值。

// A code block
var foo = 'bar';
// 一分钟60秒,Inter_enum代表分钟数,紧接上文,此时的Inter_enum为分钟数,temp222现在为要在(ALRL和ALRH)寄存器写入的数值。
temp222 += Inter_enum*60;

3、向闹钟寄存器写入所需设置闹钟对应的秒数。

// A code block
var foo = 'bar';
// An highlighted block
//设置时钟
    RCC->APB1ENR|=1<<28;//使能电源时钟
    RCC->APB1ENR|=1<<27;//使能备份时钟
	PWR->CR|=1<<8;    //取消备份区写保护
//上面三步是必须的!
	RTC->CRL|=1<<4;   //允许配置 
	RTC->ALRL=temp222&0xffff;
	RTC->ALRH=temp222>>16;
	RTC->CRL&=~(1<<4);//配置更新
	while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成         
    LL_RTC_EnableIT_ALR(RTC);

完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值