This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS:软件 UART 发送问题

Guru**** 2587345 points
Other Parts Discussed in Thread: MSP430FR5969

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/941400/ccs-software-uart-transmit-issue

主题中讨论的其他器件:MSP430FR5969

工具/软件:Code Composer Studio

大家好,这是 Harikrishna

目前、我正在创建软件 UART、我通过使用 GPIO 引脚和 MSP430FR5969/5994中的位延迟成功创建了软件 UART。(我们可以使用计时器来实现延迟、但在这里、我检查的是是否从控制器 Tx 发送单个字符)

但是、在计算要传输的位间延迟(位拆裂方法)时、我确实有点困惑。

我按照(Clock_Frequency/Baud Rate)等公式来保持连续位之间的延迟。

例如:

如果我的时钟频率= 8MHz (80000)。

波特率= 9600。

一位延迟= 8000000/9600 = 833 (正在工作)。

我在 我的代码中使用了相同数量的(_DELAY_CYCLES (800);)延迟(在两个连续位之间)、然后我的软件 UART 传输(TX)正在工作、我能够在串行监视器上查看信息。

一位延迟= 8000000/115200 = 69 (不工作)

但是,我对不同波特率(115200)使用了相同的公式,其值为69不起作用,垃圾值在串行监视器中打印。

然后、通过跟踪和错误方法手动更改该值后、UART-TX 使用115200波特率下的延迟值21 (_DELAY_CYCLES (21);)。

因此、我真的很困惑软件 UART-TX 的工作原理是什么、我应该在位之间保持确切的延迟、因为我想使用我们的控制器支持的所有可能频率来测试软件 UART-Tx。

因此、请有人帮助我使用不同频率(1MHz、2MHz、4Mhz、8MHz、16MHz、 24MHz、48Mhz)和不同的波特率(9600、38400、115200)。 控制器的设计。

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Harikrishna、您好!

    要清楚一点、您正在尝试实现 SW UART、在其中控制每个位的传输、而不是使用 UART 外设逐位管理位传输。

    如果您尝试使用 __delay_cycles (),则由于 MCLK 的精确时钟速度,将存在不确定性。 如果您使用中断处理每个位、或者即使您将其位于 SW 循环内、也必须考虑额外的 CPU 周期才能处理中断或 SW 循环。 因此、它可能类似于 Clk_Frequency/(One_bit_Delay - Processing_Latency)

    Srinivas