
STM32 RTC时钟 必须要用中断吗? 50
我知道RTC时钟就是一个计数器,我想得到年月日,时分秒的信息,必须要用到中断吗?因为还开了别的中断源。...
我知道RTC时钟就是一个计数器,我想得到年月日,时分秒的信息,必须要用到中断吗?因为还开了别的中断源。
展开
3个回答
展开全部
rtc就是一个32位的计数器,只不过它的秒计时比一般定时器准一些,输入时钟震荡一次寄存器加1,如果开中断的话会进一次中断,但是这个寄存器的值到了23*3600+59*60+59之后(也就是计数1天后)不会自动清零,需要软件清零,像你追问的是可以这样用的,中断可以不开,
更多追问追答
追问
如果软件不清零,时分秒不准吧?
追答
貌似没有,网上好像有关于年历的算法,可以移植到上边。
原子的STM32开发指南 库函数版 RTC例程里边有日历的简单算法,从1970年开始计算的。
展开全部
不一定啊……反正我开alarm中断怎么都不成,但是秒中断可以开的。
或者别的中断(比如TIM、systick等等)里去读取时间,也不错。
查询方式,隔一段时间读取也行。
或者别的中断(比如TIM、systick等等)里去读取时间,也不错。
查询方式,隔一段时间读取也行。
追问
问题时不开中断的话,到了23:59:59 秒,不会修正到00:00:00,吧?
再问一句,RTC计数器是每秒++的吧?
能不能只把RTC当做一个电池驱动的计数器,把刚输入的时间设为基准,计数器里是0,然后计数器每秒++,查询时,读取计数器的值,然后换算成年月日????
追答
STMF10x的RTC就是一个单纯的32bit计数器,假设你在1月1日的00:00:00启动,在到23:59:59时实际的数字是86399,到1月2日的00:00:01时就变成86401了……就是说不会修正为0,但你换算为真正的时分秒时才会出现00:00:00,比如这样的代码:
TimeVar=RTC_GetCounter()%86400;
THH = TimeVar / 3600; /* Compute hours */
TMM = (TimeVar % 3600) / 60; /* Compute minutes */
TSS = (TimeVar % 3600) % 60; /* Compute seconds */
实际转换的办法就是你提到的UNIX时间方式。
STM32F20X或者STM32F40X就是真正的RTC了,和读取DS1302或DS3231里的结果一样,读取到的就是时分秒年月日,比STM32F10X的方便多了。
RTC设置好之后,就是每秒加1的。
将计数换算为当前时间,就是UNIX时间方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不一定哦,看你需要的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询