韦东山Linux嵌入式课程社区
直播中

张珍岚

7年用户 132经验值
私信 关注

uart数据收发不成功

我在做uart实验时,波特率57600,能够成功收发数据,我改成115200,根据公式
UBRDIVn = (int)(12000000/(115200 x 16)) -1= (int)(6.5) -1= 6 -1 = 5
计算UBRDIV0=5,但是数据收发不成功,咋回事啊?难道是我计算错误

回帖(8)

李雪飞

2019-5-20 07:36:46
系统时钟频率太低,UBRDIVn = 6.5,取为5后你反算一下实际的波特率,误差太大

开启MPLL后,把PCLK提高才能使用115200
举报

刘斌

2019-5-20 07:53:53
那是怎么算的啊
我的主时钟12Mhz晶振,那PCLK是多少,或者能否解释下PCLK,MPLL(没看明白它们的含义)
举报

孙世珍

2019-5-20 08:01:38
S3C2410/S3C2440的时钟控制逻辑外接晶振,然后通过内部威廉希尔官方网站 产生时钟源,时钟控制逻辑给整个芯片提供3种时钟:
1. FCLK用于CPU核;
2. HCLK用于AHB总线上设备,比如CPU核、存储器控制器、中断控制器、LCD控制器、DMA和USB主机模块等;
3. PCLK用于APB总线上的设备,比如WATCHDOG、IIS、I2C、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI。
解释一些概念:AHB(Advanced High performance Bus)总线主要用于高性能模块(如CPU、DMA和DSP等)之间的连接;APB(Advanced Peripheral Bus)总线主要用于低带宽的周边外设之间的连接,例如UART、I2C等。

时钟控制逻辑里面在一个被称为PLL的东西,它可以提高系统时钟:比如晶振频率只有12M,启动PLL可以获时50M、100M、200M等频率的时钟──可以设置。

S3C2410∕S3C2440中PLL分为两个:MPLL──用于产生上面所说的FCLK、HCLK、PCLK,UPLL──用于产生USB部件的时钟。

刚上电时,PLL是不启动的,所以FCLK=HCLK=PCLK=晶振频率

你可以参考《S3C2410完全开发流程》的实验十二:CLOCK
举报

吕聪

2019-5-20 08:07:04
那么 ,uart实验中应该没有启动PLL, 这样PCLK应该是10Mhz啊

而且 ,你的回复中说 UBRDIVn = 6.5,UBRDIVn 怎么不是整数啊?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分