完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在做uart实验时,波特率57600,能够成功收发数据,我改成115200,根据公式
UBRDIVn = (int)(12000000/(115200 x 16)) -1= (int)(6.5) -1= 6 -1 = 5 计算UBRDIV0=5,但是数据收发不成功,咋回事啊?难道是我计算错误 |
|
相关推荐
8个回答
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
我的晶振是12Mhz,所以我算出来时5.5,取整后就是5了;这样我收不到数据
你的uart例程中 “UBRDIV0 = 12; //波特率为57600”使用 12Mhz晶振计算的是吧,我用这个可以测试成功,但仅把这个值改成5 ,使用115200就无法通讯了(另外说明下,我使用的是串口调试助手V2.2 来测试的) 另外,我使用38400bps, (int)(12000000/38400/16)-1=18,因此我修改UBRDIV0=18,然后编译后重新测试,可以正常通讯! 这样的话,说明计算方式是正确的! 是否因为115200波特率太高了,12mhz不能产生那么大的波特率,还要做其它设置才行 ? |
|
|
|
楼主,版主的意思是你没有开倍频,把倍频PLL打开,使得系统的频率在50Mhz,100Mhz或者200Mhz后,再进行波特率计算,由此可以减小误差。另外,调试波特率和你所使用的调试软件关系不大
|
|
|
|
了解了,多谢各位!
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2187 浏览 6 评论
1987 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4545 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 04:20 , Processed in 0.921514 second(s), Total 91, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号