有没有用RTC的同志们
看到斑竹的例子里没有RTC的,哪位同志用过,分享下经验。。 fTR_CLK = f RTCCLK /(PRL+1)手册里第284页
注:如果输入时钟频率是 32.768kHz(f RTCCLK ),这个寄存器中写入 7FFFFh 可获得周期为 1 秒钟的信号,7FFFF 写错了吧。
感觉这个芯片的RTC有问题,评估板上焊的是32.768K,1M,提供的评估板原理图是22pF电容,程序会死在这里
while(!(RCC->BDCR & 0x1<<1));//External low-speed clock ready flag.等待低速振荡器标志就位
拿手摸一下晶振附近就可以,读到的cnt 值不变
cnt= RTC->CNTL;
cnt |= RTC->CNTH << 16;
手摸着的时候,这个值会变,PRL 的值为32767的时候,这个值基本几十秒变一下,
等于7ff的时候,3秒左右,明天去办公室用示波器看看晶振波形 界面显示很多时候都要求会显示时钟的,特别是手持设备,这个问题一定得解决,客户的产品要求必须显示搞的很难受。。。 PRL 的值直接写32767就行(即0x7fff),这个工程师写多了一个F,这个RTC起振情况与ST的F1差不多的,也挑晶振不易起振,以前出的例程中,RTC是有的,只不过没有出过正式的例程,因为担心这个问题。现在已经完全删除了,有的公司说RTC用得很好,我也不知道他是用什么晶振,有的公司估计是被吓着了,发过来给我们DEBUG的板子就是用外部RTC的了。起振电容不用照抄我们原理图,你要根据卖晶振的厂家给出的匹配电容值来配。 本帖最后由 imaging1206 于 2021-3-29 22:01 编辑
tiky 发表于 2021-3-22 13:10
PRL 的值直接写32767就行(即0x7fff),这个工程师写多了一个F,这个RTC起振情况与ST的F1差不多的,也挑晶 ...
自己弄了个板子晶振起振,但是BKP的 DR寄存器为什么不能读不能写,一读就死在那里。
另外还有两个问题,1 下载完了复位不了,复位5,6次才行。 2 往里下载bin的时候 10次有两次一半的时候停止,重新进入boot再扔一次bin基本就可以了。
还有个问题,3.5寸屏 我用的是RGB模式, 初始化时 看下方向用的是 36H 寄存器,垂直时 08水平时 09 ,跟61529手册好像不对,改变 36H 这上寄存器值时,只有B3 和B0 起做用,我想实现的是屏从4个方向都可以旋转,如果可以的话操作寄存器 比改LTDC_BUF的算法简单的多。 下载你按照下载说明的那个文档,复位不行时关一下电就百分百行了,不用重复下载Bootloader,那样费时费力。
3.5寸理论上也可以实现4寸的效果的,你在关键链路上的函数上动手脚就行了,可以研究一下4寸的旋转函数。
不过我很很疑惑的是,3.5寸不是有可以支持MCU888,808024位的吗?用MCU模式配合我们芯片的TK80接口有得天独厚的优势,为何不用?很多人迷信RGB888接口能带什么质的飞跃,你真正了解了就知道有MCU模式还是应该优先用MCU模式,理由如下:1、MCU模式是用屏自带的高速显存,节能;2、MCU模式可以在屏上实现2D加速,例如跳地址全彩填充,DMA就不好办了,但是屏可以划一片区域出来,令其地址连续,从而实现了高速的DMA TO 2D ;3、用MCU模式可以用TK499的TK80的高级功能,例如纯色填充等;4、用MCU模式可以实现屏上旋转屏幕,一个指令就搞定的硬件实现旋转,是其它方式远远无法匹敌的。
RGB模式的屏,屏上是不带显存,或者好像上面的3.5寸屏,屏上有显存,但是你可以不用;此模式下画面要保持,需要MCU不断刷新。这样,24根数据线及4根同步信号线,要不断地拉高拉低等,线那么长,就算你是用超导体,功耗也大得要命,因为线是带电容的,拉高低一次等于充了一次电又放一次电,28根线,M级的速度在充电放电,功耗吓死人了。RGB在你的芯片上有GPU,内存也比较大,速度比较快,才能体现出优势。确实显存在单片机内部,对于研发人员是最容易操作的了,再加上GPU的把持,可以速度上去,效果也好做,例如电脑的Director-10。总的来讲,主要看图片变换能力,如果RGB模式上,你能容易实现图像变换,可以选择;但是如果只是搬上去显示,当个搬运工而矣,那就没必要整个耗时耗力的RGB模式了。
可以分享一下RTC的例程吗,最近在调RTC需要。 #include "tk499.h"
void rtc_work_cfg()
{
uint32_t scaler;
uint32_t cnt;
RCC->APB1ENR |= 1<<29; //Enable the PWREN clock.
PWR->CR |= 1<<8; //Enable access to the RTC and backup registers.
RCC->BDCR |= 1<<16; //Force the Backup domain reset.
RCC->BDCR &= ~(1<<16); //Release the Backup domain reset.
RCC->BDCR |= 1<<15; //Enable RTC clock.
RCC->BDCR |= 1<<8; //select LES as RTC clock source.
RCC->BDCR |= 1<<0; //External low-speed oscillar enable.
while(!(RCC->BDCR & 0x1<<1));//External low-speed clock ready flag.
while(!(RTC->CRL & 1<<5)); //Wait until last write operation on RTC registers has finished.
RTC->CRL |= 1<<4; //Enter the RTC configuration mode.
RTC->ALRH = 0x0; //Set the RTC alarm value.
RTC->ALRL = 0x300;
RTC->PRLH = 0x0; //Set the RTC prescaler value.
RTC->PRLL = 0x10;
RTC->CNTH = 0x0; //Set the RTC counter value.
RTC->CNTL = 0x50;
RTC->CRL &= ~(1<<4);//Exit from the RTC configuration mode.
while(!(RTC->CRL & 1<<5));//Wait until last write operation on RTC registers has finished.
while(!(RTC->CRL & 1<<3));//wait until the RTC registers (RTC_CNT, RTC_ALR and RTC_PRL) are synchronized with RTC APB clock.
while(1)
{
cnt= RTC->CNTL;
cnt |= RTC->CNTH << 16;
scaler= RTC->PRLL;
scaler |= RTC->PRLH << 16;
printf("Prescaler = %x,cnt = %x\n",scaler,cnt);
GUI_Delay(500);
}
}
页:
[1]