在默认情况下,apb2的时钟源为osc24M,串口如果设置为高波特率如420000, 则误差较大。
计算方式:
24M/16(串口一般是16倍采样)/420000 = 3.57
不管是取3 还是取4 ,都有较大误差。
因此可以提高apb2的时钟,将其挂在PLL_PERIPH0下,
具体方式为在设备树中增加:
&ccu {
assigned-clocks = <&ccu 18>;
assigned-clock-parents = <&ccu 9>;
assigned-clock-rates = <60000000>;
};
如果想看为什么是9 和18 ,可以看看驱动代码:drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
另外,在linux中可以直接查看时钟树:(需把debugfs设置成=y)
mount -t debugfs none /sys/kernel/debug
cat sys/kernel/debug/clk/clk_summary