打印

感觉GD的官方例程有问题

[复制链接]
1354|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shizaigaole|  楼主 | 2022-9-8 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void rtc_show_time(void)
{
    uint32_t time_subsecond = 0;
    uint8_t subsecond_ss = 0,subsecond_ts = 0,subsecond_hs = 0;

    rtc_current_time_get(&rtc_initpara);  

    /* get the subsecond value of current time, and convert it into fractional format */
    time_subsecond = rtc_subsecond_get();
    subsecond_ss=(1000-(time_subsecond*1000+1000)/400)/100;
    subsecond_ts=(1000-(time_subsecond*1000+1000)/400)%100/10;
    subsecond_hs=(1000-(time_subsecond*1000+1000)/400)%10;
   
    printf("Current time: %0.2x:%0.2x:%0.2x .%d%d%d \n\r", \
          rtc_initpara.hour, rtc_initpara.minute, rtc_initpara.second,\
          subsecond_ss, subsecond_ts, subsecond_hs);
}

程序前期的同步预分频值设为prescaler_s = 0xFF;

这是GD的GD32F4xx_Firmware_Library_V2.1.0里面的例程。

根据手册,亚秒值为 ( FACTOR_S - SSC ) / ( FACTOR_S + 1 ),此程序中为 (255-time_subsecond )/256.


感觉例子上明显不对

使用特权

评论回复
沙发
chenjun89| | 2022-9-8 21:53 | 只看该作者
官方例程不一定都对的

使用特权

评论回复
板凳
sonicll| | 2022-9-13 09:40 | 只看该作者
这里应该就是官方例子写错了,代码里面那个400,估计是照搬GD32F3x0系列写的,RTC时钟源选择IRC40K,FACTOR_S+1就等于400,但是F4系列的内部低速时钟其实是32K的,而且代码里RTC时钟源选的也不是IRC32K,而是LXTAL

使用特权

评论回复
地板
tpgf| | 2022-10-7 11:51 | 只看该作者
“亚秒”并非时间单位,而是转速的单位,是指没有达到秒的速度,即1GHz/1.2秒。

使用特权

评论回复
5
nawu| | 2022-10-7 12:04 | 只看该作者
请问分频值还分异步分频和同步分频吗

使用特权

评论回复
6
aoyi| | 2022-10-7 12:26 | 只看该作者
可以输出用示波器看看实际的是多少就知道了

使用特权

评论回复
7
zljiu| | 2022-10-7 15:38 | 只看该作者
分钟级:以分钟为单位,即速度按分钟计算,7200转/分
秒级:以秒为单位,即速度按秒计算,1GHz/秒
亚秒级:没有达到秒的速度,即1GHz/1.2秒

使用特权

评论回复
8
gwsan| | 2022-10-7 15:48 | 只看该作者
估计官方的例程也不是都进行过检测的啊

使用特权

评论回复
9
tfqi| | 2022-10-7 15:58 | 只看该作者
这里的亚秒和秒的换算关系是多少啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:衰兰送客咸阳道,天若有情天亦老

146

主题

3735

帖子

11

粉丝