关于STM32的 LCD 和 RTC

关于LCD:

LCD用的模块是 ST7565P

驱动的lcd是 128*64点阵

 

有个寄存器的区域是存放数据, 分别对应了lcd上的 128*64点阵.  ,通讯方式是SPI

 

如果需要横屏, 镜像 这些功能, 可以设置读取寄存器的方式, 比如要上下镜像,  那读数据就会从最后一个地址开始读,那么显示的东西就会反过来了.

 

想起了2410开发板上关于TFT显示驱动里面 是在内存区中设定了一个指定的内存区域作为显示缓冲,   驱动程序的功能就是按照一定频率去读这个缓冲, 然后吧数据传送给tft driver.     作为应用程序只需要去读写指定这个内存区域即可.  那么PDA的截图功能实际上就是把这个内存区域的数据直接取出来..当然很完美.

 

关于RTC:

STM32的RTC没有DS1302强悍, 它仅仅是一个32位的计数器.   设定分频系数以后就开始计数, 比如用32768的晶体 那么分频系数就是32768,  这样每秒中断一次,  计数器加1.  当然如果晶体有误差可以调整这个分频系数来微调误差.

如果每秒计数一次,  那么32位的RTC计数器 可以计数4*1024*1024*1024=60秒*60分钟*24小时*58400天  那么算下来是160年. 即, 只要RTC供电的电池不拆下来,  可以保持160年在不断加1操作.

 

读别人的代码对RTC用法的理解:

STM32有 BKP寄存器数据可以掉电不丢失数据.  这里用到了5个,分别是设置状态,  年,月,日,星期

设置状态是写入一个初始化值, 程序开始如果读到这个值正确, 说明时钟曾经被设置过, 那么不需要再设置,  如果读这个值不对, 那么说明是第一次上电要提示修正时间.  余下的4个寄存器分别存年,月,日, 星期 数据

 

RTC中断处理程序:

    得到的count值如果大于86400(一天的秒计数24*60*60), 那么说明几天没开机了.  count/86400可以知道过了几天,那么从BKP寄存器读出来的年月日星期数据就加上天数更新一下,  得到一个新的日期;  count%86400 就是当日的一个count数(这个肯定是小于86400啦)然后根据这个count,就可以计算出来现在的时间.....

 

  也就是说每天的24:00, 就会写一次BKP寄存器更新一下年月日星期数据, 这个每天只更新一次. count的参考点就是半夜24:00

 

 

设定新的日期时间:

    设定日期就是修改 4个bkp寄存器就行了.

    设定新时间就是要计算出来新的时间 对应的count应该是多少,  然后把count值赋值给RTC寄存器就可以了.

 

以上就是我对RTC的理解. 欢迎拍砖.

 

 对了 闰年问题要自己写算法. 否则你的日期累计计算是有问题的

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值