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.
您好!
我有一个8Mbit 串行闪存、通过 SPI 连接到 MSP。 闪存用于实时保存测量数据。 所有值均保存为十六进制。
我对一个函数进行编码、以将数据从闪存中获取、并通过 UART 发送到 PC (板载 UART 到 RS232转换器和 RS232到 USB 转换器)。 一般而言、通信没有问题。 如果我所做的就是发送十六进制值、那么一切都很完美。
如果我修改数据使其以 ASCII 格式传输、以便能够直接使用它将其保存在.txt 中并在 Excel 中使用数据、则会出现此问题。 我尝试了2种不同的转换方法:使用 sprintf()或模数运算来分离每个数字。
闪存上有65536数据包。 在将整个闪存填充为数据并使用 HTerm 从 PC 读取数据后、恰好在传输大约40个完全随机的封装期间、MSP 会出现某种断续模式。 在接收端、几乎缺少一个完整的封装。 它只是在早期的下一个封装中继续运行。 这造成大约80个包件有缺陷,这是不可接受的。
由于十六进制传输的工作方式、因此 MSP 修改数据必须存在一些问题。 首先、代码从闪存中检索一个16字节的整包、并将每个字节保存在数组中。
使用 sprintf 转换的代码:
///////////////////////////////////////////////////////////
char dataen[10]; sprintf (dataen、"%d."、flash_ausgelesen_Daten[0]); uart_print (daten); sprintf (dataen、"%d."、flash_ausgelesen_Daten[1]); uart_print (daten); sprintf (dataen、"%d;"、flash_ausgelesene_Daten[2]); uart_print (daten); sprintf (daten、"%d:"、flash_ausgelesene_Daten[3]); uart_print (daten); sprintf (dataen、"%d:"、flash_dataen[3];flash_daten_datesen[4] UART_PRINT (daten); sprintf (dataen、"%d;"、flash_ausgelesen_Daten[5]); UART_PRINT (daten); sprintf (daten、"%d;"、flash_ausgelesen_Daten[6]); UART_PRINT (daten); sprintf (dataen、"%d;"、flash_ausgelesene_Daten[7]); uart_print (dataen); //此部件转换为整数整数 int Spannung、temperatur、Strom、Druck; Spannung=(flash_gelesene_Daten[8]<<dataene]+<11_zh_datesene[8]+[gelen_zh_zh_datene]+<en_en_zh_en_en_ene]<11_zh_en_zh_zh_en_en_en_enuesen_ene<1 (temperategelen_en_en_en_en_en_en_en_en_en_en_en_enuesenuesen_en_enuesen_enuesen_en_en_en_enu+<11]<11_zh_enuesenuesenuesenuesen_zh_en_zh_ char spannung[10]、strom[10]、temperatur[10]、druck[10]; sprintf (spannung、"%d;"、Spannung); sprintf (strom、"%d;"、Strom); sprintf (Druatur、"%d;"、temperatur); sprintf (struck、"%d);sprintf (dr); UART_PRINT (spannung); UART_PRINT (strom); UART_PRINT (temperatur); UART_PRINT (DRACK); UART_SendByte (0x0A);
///////////////////////////////////////////////////////////
F233非常小、仅有8kB 闪存和1kB RAM、我非常喜欢它的功能:
MSP430:加载完成。 有7568 (代码)和26 (数据)字节被写入闪存。 预期的 RAM 用量为829字节(未初始化的数据+堆栈)。
可能是 MSP 在处理转换时遇到问题、因此这些问题是否其他人有任何想法?
我们考虑将具有双倍闪存和 RAM 的 F235与下一个电路板一起使用、是否可能不会在大哥身上发生间断?
我希望有人理解我的问题并能帮助我。 我正在尝试通过转换 PC 上的数据来解决问题、但我对 Visual Studio 缺乏技能给了我一些问题。
void UART_SendByte (char data) { WDTCTL = WDTPW + WDTCNTCL; while (!(IFG2&UCA0TXIFG));//传输缓冲区准备就绪? UCA0TXBUF = DATA; } void UART_PRINT (char *字符串) { for (;*字符串;string++)//对于每个字节直到字符串末尾 的{ UART_SendByte (*字符串);//发送每个字节 } }
不要认为这是问题所在。 如果我只是这么做的话、一切都很完美
for (j=0;j我甚至尝试将所有内容发送到 ASCII 修改后的字节中,只使用 UART_SendByte(),但仍然有相同的错误提示。
我还遇到了一个问题、就是希望 RAM 的使用量稍微多一点(仍然低于900、但仍有1k 可访问的空间)、RAM 中的变量在没有预期的情况下被修改。 我将其追溯到 sprintf()期间发生的时间点,因此我尝试尽可能减少 RAM 的使用量,以消除该问题。
这就是为什么我认为这是 MSP 无法正常工作的问题。 仅当我修改数据时才会发生这种情况、而这种情况发生在非常罕见的情况下。 所有可能的干扰中断(定时器)也被打开。