关于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的理解. 欢迎拍砖.
对了 闰年问题要自己写算法. 否则你的日期累计计算是有问题的