我正在使用pic32mx5xx处理 UART 。我需要的只是从 pic 向终端(Putty)发送一条消息,但它不起作用,因为我会出现无效字符。波特率设置为19200,如何计算时钟频率?
UART的时钟频率是波特率的16倍是真的吗?如果我算一下,时钟频率应该是 307200,但这似乎不对。
有人可以帮助我了解波特率和时钟频率如何相互关联吗?另外如何计算两者?
谢谢!
我正在使用pic32mx5xx处理 UART 。我需要的只是从 pic 向终端(Putty)发送一条消息,但它不起作用,因为我会出现无效字符。波特率设置为19200,如何计算时钟频率?
UART的时钟频率是波特率的16倍是真的吗?如果我算一下,时钟频率应该是 307200,但这似乎不对。
有人可以帮助我了解波特率和时钟频率如何相互关联吗?另外如何计算两者?
谢谢!
波特率发生器有一个自由运行的 16 位定时器。要获得所需的波特率,您必须配置其周期寄存器 UxBRG和预分频器 BRGH。
通常最好将 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 MHz和BRGH = 1以及所需的波特率19200,您将计算:
UxBRG = 20000000 / (4 * 19200) - 1
= 259
如果您使用 Microchip 的一些最新开发库和代码示例,您可能会发现库中已经有 UART 方法可以根据您的需要设置 PIC。如果您深入研究新的编译器目录结构,您会发现 microsoft 格式的帮助文件(不用担心,如果您在 Unix 类型的计算机上,有 Unix 实用程序可以读取这些类型的文件。)。在那里,您可以深入了解帮助以查找可以从程序调用以配置 PIC 硬件的各种现成方法的文档。买家当心,代码不是那么成熟。例如,我正在开发一个需要对两个模拟信号进行采样的 PIC 项目。PIC 硬件 A/D 转换器非常复杂。但很明显,现成的代码只覆盖了 PIC 能力的 10%。
-祝你好运