如何使用正确的时钟频率和波特率使UART在PIC32中工作?

时间:2013-07-17 20:14:13

标签: embedded microcontroller pic microchip pic32

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

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

请参阅reference manual 21.3 - UART波特率生成器部分中的公式,了解如何为UxBRG计算正确的值。

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

  • 当BRGH = 0时:

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

    UxBRG = FPB / (4 * BAUDRATE) - 1
    

FPB是外围总线时钟频率。

例如,如果 FPB = 20 MHz BRGH = 1 且所需的波特率 19200 ,您将计算:

UxBRG = 20000000 / (4 * 19200) - 1
      = 259

答案 1 :(得分:0)

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

好运