0

我正在使用pic32mx5xx处理 UART 。我需要的只是从 pic 向终端(Putty)发送一条消息,但它不起作用,因为我会出现无效字符。波特率设置为19200,如何计算时钟频率?

UART的时钟频率是波特率的16倍是真的吗?如果我算一下,时钟频率应该是 307200,但这似乎不对。

有人可以帮助我了解波特率和时钟频率如何相互关联吗?另外如何计算两者?

谢谢!

4

2 回答 2

1

波特率发生器有一个自由运行的 16 位定时器。要获得所需的波特率,您必须配置其周期寄存器 UxBRG预分频器 BRGH

  • 当 BRGH 设置为 0(默认值)时,定时器每 16 个外设总线时钟周期递增一次。
  • 当 BRGH 为 1 时,定时器每 4 个周期递增一次。

通常最好将 BRGH 设置为 1 以获得较小的波特率误差,只要 UxBRG 值不会变得太大而无法放入 16 位寄存器(在较慢的波特率上)。

周期寄存器 UxBRG 中的值决定了数据线上一个脉冲的持续时间,以波特率发生器的定时器递增。

请参阅参考手册中第21.3 节 - UART 波特率发生器中的公式,了解如何计算 UxBRG 的正确值。

要计算 16 位波特率发生器定时器的周期以达到所需的波特率:

  • 当 BRGH = 0 时:

    UxBRG = FPB / (16 * BAUDRATE) - 1
    
  • 当 BRGH = 1 时:

    UxBRG = FPB / (4 * BAUDRATE) - 1
    

其中 FPB 是外设总线时钟频率。

例如,如果FPB = 20 MHzBRGH = 1以及所需的波特率19200,您将计算:

UxBRG = 20000000 / (4 * 19200) - 1
      = 259
于 2013-07-17T21:17:39.237 回答
0

如果您使用 Microchip 的一些最新开发库和代码示例,您可能会发现库中已经有 UART 方法可以根据您的需要设置 PIC。如果您深入研究新的编译器目录结构,您会发现 microsoft 格式的帮助文件(不用担心,如果您在 Unix 类型的计算机上,有 Unix 实用程序可以读取这些类型的文件。)。在那里,您可以深入了解帮助以查找可以从程序调用以配置 PIC 硬件的各种现成方法的文档。买家当心,代码不是那么成熟。例如,我正在开发一个需要对两个模拟信号进行采样的 PIC 项目。PIC 硬件 A/D 转换器非常复杂。但很明显,现成的代码只覆盖了 PIC 能力的 10%。

-祝你好运

于 2013-08-29T15:32:14.277 回答