在stm32微控制器中设置usart的波特率

时间:2018-01-16 17:47:23

标签: serial-port stm32 uart

为什么我们需要使用这个公式计算波特率,

波特= fCK /(16 * USARTDIV)

我的意思是,为什么我们不能直接在USART_BRR寄存器中写入9600或任何其他所需的波特率值?为什么我们需要先执行此计算。无论如何我们在这里计算什么?

这可能是一个愚蠢的问题,但我真的很困惑。请帮忙。

提前致谢!

2 个答案:

答案 0 :(得分:4)

您不能将所需的波特率写入寄存器,因为处理器不知道时钟对该外设的速度有多快,因此无法正确设置分频器。

有可能做一个你可以告诉波特率的usart,但需要额外的复杂性,并且仍然需要知道它的时钟有多快。

答案 1 :(得分:3)

您没有配置软件,而是硬件。这意味着,您设置的位(或多或少)直接连接到时钟分频器,后者控制UART模块的波特率。

例如,您必须在计算中使用fck。想象一下,UART模块必须自己计算fck。问题是,fck是所有使用的时钟分频器的结果,没有集中配置。计算硬件中的fck 的努力将是不成比例的(努力=成本)。让用户计算它会更容易。