imaging1206 发表于 2021-3-20 21:42:25

有没有用RTC的同志们

看到斑竹的例子里没有RTC的,哪位同志用过,分享下经验。。

imaging1206 发表于 2021-3-21 19:56:41

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秒左右,明天去办公室用示波器看看晶振波形

imaging1206 发表于 2021-3-21 19:59:27

界面显示很多时候都要求会显示时钟的,特别是手持设备,这个问题一定得解决,客户的产品要求必须显示搞的很难受。。。

tiky 发表于 2021-3-22 13:10:50

PRL 的值直接写32767就行(即0x7fff),这个工程师写多了一个F,这个RTC起振情况与ST的F1差不多的,也挑晶振不易起振,以前出的例程中,RTC是有的,只不过没有出过正式的例程,因为担心这个问题。现在已经完全删除了,有的公司说RTC用得很好,我也不知道他是用什么晶振,有的公司估计是被吓着了,发过来给我们DEBUG的板子就是用外部RTC的了。起振电容不用照抄我们原理图,你要根据卖晶振的厂家给出的匹配电容值来配。

imaging1206 发表于 2021-3-29 21:49:12

本帖最后由 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的算法简单的多。

tiky 发表于 2021-3-30 16:42:57

      下载你按照下载说明的那个文档,复位不行时关一下电就百分百行了,不用重复下载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模式了。
      

c67890@163.com 发表于 2021-4-9 16:55:52

可以分享一下RTC的例程吗,最近在调RTC需要。

tiky 发表于 2021-4-9 18:23:24

#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]
查看完整版本: 有没有用RTC的同志们