我在用TI的EK-TM4C123GXL时候发现,datasheet等一切官方资料显示的都是在
SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
语句后系统时钟被配置成50MHz,此时用函数SysCtlClockGet()返回的值也是50M。
但是我使用函数SysCtlDelay(SysCtlClockGet()),从理论上说应该是延时3s,但是我用示波器测下来延时了3.34s
利用延时公式反推得到的时钟为45MHz。我又试了SysCtlDelay(50000000),还是一样的情况。
请问有人知道这是什么情况造成的?是TI的疏忽吗?
我测了SYSCTL_SYSDIV_4,实际45M,不符合声明
SYSCTL_SYSDIV_5,实际是40M,符合声明
SYSCTL_SYSDIV_3,实际是60M,不符合声明
答:你可以改用ROM_SysCtlDelay()會比較準確些. 這並不是System Clock的問題.而是ROM存取可以在一個Clock完成. flash則需要好幾個Clock.所以直接使用TI存放在ROM裡面的Library, 可以避掉這個問題.
但是如果你需要精確的Delay time. 建議使用SysTick或是Timer. |