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.

[参考译文] MSP430F5529:UART 在发送时看似随机地丢弃字节

Guru**** 2601915 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/647104/msp430f5529-uart-dropping-bytes-seemingly-randomly-on-transmission

器件型号:MSP430F5529

您好!

我尝试通过 UART 从 MSP430F5529发送字节数据。 UART 传输在 ADC12ISR 内部完成。 我们的传输应该是7字节数据包、其中字节3-6是来自 ADC 的数据。 其中一个由 sendWeight 函数发送的 ADC 数据字节有时会丢失。 前两个字节和最后一个字节始终被成功发送。 问题似乎与时序相关、因为当传输每个字节时、当代码以断点执行时、传输始终成功。 我们禁用 ADC12ISR 内的 ADC12中断、以避免在 ISR 运行时触发中断。 此外、即使其中一个中间 ADC 数据字节未成功发送、也始终传输最后一个字节。

为什么不发送 UART 传输的某些字节会有任何原因?

我们的代码的相关部分如下所示。

如果有任何帮助,将不胜感激。 谢谢你。

//通过 UART 发送 A6信息
// 1. 位置2
UCA1TXBUF = POST2;
while (UCA1STAT&UCBUSY);
// 2. 添加与删除
UCA1TXBUF =添加;
while (UCA1STAT&UCBUSY);
// 3. 重量
newWeight = getFinalWeight (times);
sendWeight (newWeight - preWeight);
preWeight = newWeight;
UCA1TXBUF = 0x0A;//新行
while (UCA1STAT&UCBUSY);



//使用 UART void sendWeight (float 输入)发送重量数据 { 无符号长整型 dwResult = F2DW (输入); // c[]:将浮点数存储到单独的字节中 // c[0]最高字节、先发送 // c[3]最低字节,最后发送 // c[4]=\0,标记结束,不发送 C[3]=(dwResult & 0xFF); //最低字节 C[2]=((dwResult >> 8)& 0xFF); C[1]=((dwResult >> 16)& 0xFF); C[0]=((dwResult >> 24)& 0xFF); //最高字节 C[4]='\0'; uint8_t i = 0; 对于(I = 0;I < 4;I++) { UCA1TXBUF = c[i]; while (UCA1STAT 和 UCBUSY); } }

前两个字节始终成功发送、但下一个字节是其中之一  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的第一个猜测是数据行中的非透明内容("食用"非 ASCII 字符)。 您的测试点与 TX 引脚的距离有多近?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果轮询 UCA1IFG:UCTXIFG 而不是 UCA1STAT:UCBUSY、您是否会获得相同的结果? 我没有这样使用过 UCBUSY、我可以告诉大家、TI 示例也没有。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce、您好、感谢您的回答。 在替换 UCA1STAT:UCBUSY wuth UCA1IFG:UCTXIFG 时、我们确实会得到相同的结果、但问题似乎出在接收端(Raspberry PI)。 我们的逻辑分析仪显示 MSP430正在发送正确的数据包。 我们认为这个问题可能与波特率(9600)基于32kHz 时钟有关、这可能比1MHz SMCLK 的精确度低。 但是、当我们切换到 SMCLK 并保持9600波特率时、Raspberry PI 仍无法接收某些字节。

    再次感谢

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

    您使用的是什么时钟源? 如果您有 LaunchPad、最好使用外部4MHz 谐振器。

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

    如果此帖子已解决、请继续并选择上述帖子已解决您的问题、以便我们可以关闭此主题。

    谢谢、此致、

    Matt Calvo