您好!
我尝试通过 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); } }
前两个字节始终成功发送、但下一个字节是其中之一