完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
因为没装置外部的32.768K振荡器
以下是设置的程式码CLOCK设置 /* Unlock protected registers */ SYS_UnlockReg(); /* Enable clock source */ CLK_EnableXtalRC(CLK_PWRCON_OSC10K_EN_Msk|CLK_PWRCON_OSC22M_EN_Msk|CLK_PWRCON_XTL12M_EN_Msk); /* Waiting for clock source ready */ CLK_WaitClockReady(CLK_CLKSTATUS_OSC10K_STB_Msk|CLK_CLKSTATUS_OSC22M_STB_Msk|CLK_CLKSTATUS_XTL12M_STB_Msk); /* Disable PLL first to avoid unstable when setting PLL */ CLK_DisablePLL(); /* Set PLL frequency */ CLK->PLLCON = (CLK->PLLCON ~(0x000FFFFFul)) | 0x00004016ul; /* Waiting for PLL ready */ CLK_WaitClockReady(CLK_CLKSTATUS_PLL_STB_Msk); /* If the defines do not exist in your project, please refer to the related clk.h in the Header folder appended to the tool package. */ /* Set HCLK clock */ CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_PLL, CLK_CLKDIV_HCLK(1)); /* Enable IP clock */ CLK_EnableModuleClock(ADC_MODULE); CLK_EnableModuleClock(CAN0_MODULE); CLK_EnableModuleClock(I2C0_MODULE); CLK_EnableModuleClock(PWM45_MODULE); //CLK_EnableModuleClock(RTC_MODULE); CLK_EnableModuleClock(SPI0_MODULE); CLK_EnableModuleClock(UART0_MODULE); CLK_EnableModuleClock(PDMA_MODULE); CLK_EnableModuleClock(TMR0_MODULE); CLK_EnableModuleClock(TMR3_MODULE); CLK_EnableModuleClock(WDT_MODULE); // CLK_EnableModuleClock(WWDT_MODULE); //CLK_EnableCKO(CLK_CLKSEL2_FRQDIV_S_HCLK, 11, 0); //CLK->FRQDIV = CLK->FRQDIV ~CLK_FRQDIV_CLKO_1HZ_EN_Msk; CLK_SetModuleClock(RTC_MODULE, CLK_CLKSEL2_RTC_SEL_10K_LIRC, MODULE_NoMsk); CLK_EnableModuleClock(RTC_MODULE); /* Set IP clock */ CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HCLK, CLK_CLKDIV_ADC(10)); CLK_SetModuleClock(PWM45_MODULE, CLK_CLKSEL2_PWM45_S_HCLK|CLK_CLKSEL2_PWM45_EXT_HCLK, MODULE_NoMsk); //CLK_SetModuleClock(RTC_MODULE, CLK_CLKSEL2_RTC_SEL_10K_LIRC, MODULE_NoMsk); CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_HCLK, MODULE_NoMsk); //CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1)) CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_CLKDIV_UART(1)); CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0_S_HXT, 0); CLK_SetModuleClock(TMR3_MODULE, CLK_CLKSEL1_TMR3_S_LIRC, 0); CLK_SetModuleClock(WDT_MODULE, CLK_CLKSEL1_WDT_S_HCLK_DIV2048, MODULE_NoMsk); 功能设置 void RTC_INIT(void) { /* Open RTC and start counting */ sWriteRTC.u32Year = DATABUFF[293]; sWriteRTC.u32Month = DATABUFF[294]; sWriteRTC.u32Day = DATABUFF[295]; sWriteRTC.u32DayOfWeek = DATABUFF[299]; sWriteRTC.u32Hour = DATABUFF[296]; sWriteRTC.u32Minute = DATABUFF[297]; sWriteRTC.u32Second = DATABUFF[298]; sWriteRTC.u32TimeScale = RTC_CLOCK_24; RTC_Open( sWriteRTC); //DATABUFF是自行宣告的资料阵列,透过RS485写入资料 } void RTC_Read(void) { RTC_GetDateAndTime( sReadRTC); DATABUFF[293] = sReadRTC.u32Year; DATABUFF[294] = sReadRTC.u32Month; DATABUFF[295] = sReadRTC.u32Day; DATABUFF[299] = sReadRTC.u32DayOfWeek; DATABUFF[296] = sReadRTC.u32Hour; DATABUFF[297] = sReadRTC.u32Minute; DATABUFF[298] = sReadRTC.u32Second; //DATABUFF是自行宣告的资料阵列,透过RS485读取资料 } 在开机后 透过外部写入时间 之后就一直读取资料 发生一个现象 RTC读取出来的秒数 每增加1 现实的秒数大约 3.X秒 是不适从32768改成10000是需要额外设定甚么的吗? 各位大大有碰过类似的问题吗? 谢谢 |
|
相关推荐
1个回答
|
|
需要修改这个寄存器,这个寄存器是以32.768KHZ为标准讲的,换成10KHZ要做对应的修改
|
|
|
|
只有小组成员才能发言,加入小组>>
651浏览 3评论
552浏览 2评论
382浏览 1评论
403浏览 1评论
366浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-14 06:23 , Processed in 0.614762 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号