你好、
我在 C2000WARE V1.00.3.00发行版中发现了一个专门针对 F2837xD 芯片的错误。
driverlib 中的 SCI_setConfig()函数(第71行)按如下方式计算分频器:
分频器=((lspclkHz/(波特* 8U))- 1U);
这是错误的、应该是:
分频器= lspclkHz/((波特* 8U)- 1U);
此致、
SR
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好 Sal、
所遵循的流程如下:
分频器= lspclkHz/((baud * 8U)- 1U);请参阅下面的其他文章、问题只有一半...
我再次验证了逻辑分析仪上的信号以及 Realterm 上的帧问题。
其他项目信息:
此致、
SR
您好 Sal、
我深入研究了这个问题、找到了根本原因。 这里的问题是波特率分频器的粗略设置以及导致波特率问题的实现问题。 我的意思是:
使用数据表/lib 函数、921600 @ 50MHz 时钟提供的分频器为5、从而产生1041666波特。
使用 my (OLD)函数时、921600 @ 50MHz 时钟会提供6分频器、从而产生892857波特。
有趣的是、后者仅会有~3%的折扣、其中库函数的差异为~12%。
这最终意味着函数本身(根据数据表)是正确的、但整数除法(以及相关的不正确舍入)会给出错误的除数。 当使用整数算术完成时、内部部分会错误地截断分频器值。 在我的示例中、50MHz /(921600 * 8)= 6.78168...、但实现(使用整数)会将其截断为仅6、使(1 - 0.78168...) 并给出最后的除数5。
我已将驱动程序中的计算修改为以下内容、与数据表匹配、但使用浮点除法和+0.5f 来校正舍入(如+0.5f、截断、如果值为正值、就像舍入一样):
divider =(uint32_t)(((float) lspclkHz/((float) baud)* 8.0f)+ 0.5f)- 1U;
它为我的情况提供了正确的分频器值6、对于任何其他值、它将始终处于最正确分频器值的-0.5至0.5之间。
此致、
SR