嵌入式 C 指针的波特率之间的 link 是多少

What is the link between Baud rate for embedded C pointers

我正在阅读有关使用 C 控制设备的手册,一般来说它只是在玩弄地址;然而,当我们通过 UART 连接时,我们有波特率。

那么将值放入某个地址与波特率有何关系?

在嵌入式编程中有必要吗?

这些地址不是内存。它们是 内存映射 I/O 寄存器。

UART 的波特率除数寄存器地址是一个硬件寄存器。硬件寄存器中的值直接控制硬件。写入波特率除数寄存器的值通常是计数器重载值,一位周期是在给定特定外设时钟源的情况下,从除数中的值向上计数(或向下计数)所花费的时间。因此,例如,如果 UART 外设时钟为 12MHz,并且您想要 19200 的波特率,则可以将除数寄存器设置为 12x106/19200 = 625.

虽然您可以像内存一样读写硬件寄存器,但它们的行为不一定像内存。有些寄存器可能是只读的,有些是只写的,有些写可能与读有不同的效果,这样如果你写入一个值,读回的值将不是写入的值。这通常适用于位级别,因此寄存器中的每个位都可能表现出不同的行为。

例如,在许多 UART 实现中,您的写入数据要发送到的寄存器与您为接收到的数据读取的地址相同——但是它们不是同一个寄存器,而是一个只读寄存器和一个写入寄存器- 只有寄存器映射到相同的地址。

它不是专门的嵌入式编程,而是 I/O 硬件;很简单,在嵌入式系统之外,您通常不会直接写入硬件,除非您碰巧正在编写内核设备驱动程序,在那里您会遇到同样的事情。

以及必须假定现有知识和专业知识的设备手册,也许您应该查阅更一般的参考资料。现在你知道了关键术语:"memory-mapped I/O"MMIO,你可以更好地 Google 它。示例: