将SPI设备由DS1302更改为开发板上的FLASH(W25QXX模块,注意该模块可以使用硬件SPI接口),主要工作为上位机发送数据给单片机,单片机将数据写入flash中;单片机在写入数据后,将这些数据读出,并在数码管上显示至少4个数据(注意尽量保证发送的是0-9,A-F,否则有可能显示失败),同时将所有数据发送到上位机串口显示,上位机上增加chart控件的数据显示
时间: 2023-12-08 15:03:24 浏览: 84
好的,这个任务需要分为上位机和单片机两部分来实现。
## 上位机部分
首先,我们需要在上位机中编写程序,将要发送给单片机的数据通过串口发送出去。同时,我们需要接收单片机返回的数据,并将其显示在 chart 控件中。
以下是上位机部分的代码示例:
```python
import serial
import time
import binascii
import struct
import matplotlib.pyplot as plt
ser = serial.Serial('COM3', 9600, timeout=0.5) # 打开串口
ser.flushInput() # 清空输入缓冲区
# 将要发送给单片机的数据
data_to_send = [0x11, 0x22, 0x33, 0x44, 0x55]
# 将数据转换为二进制字符串并发送
data_str = ''.join([chr(x) for x in data_to_send])
ser.write(data_str.encode())
# 等待单片机返回数据
time.sleep(0.1)
data_received = ser.read_all()
# 将数据转换为列表
data_list = [int(x, 16) for x in binascii.b2a_hex(data_received).decode().split()]
# 绘制 chart
plt.plot(data_list)
plt.show()
ser.close() # 关闭串口
```
## 单片机部分
接下来,我们需要在单片机中编写程序,使用 SPI 接口将数据写入 FLASH 中,并从 FLASH 中读取数据并在数码管中显示。
以下是单片机部分的代码示例:
```c
#include <stdio.h>
#include "stm32f10x.h"
#include "spi.h"
#include "delay.h"
#include "MAX7219.h"
#include "W25QXX.h"
#define FLASH_ADDRESS 0x00000000
#define DATA_LENGTH 5
int main(void)
{
uint8_t data_to_write[DATA_LENGTH] = {0x11, 0x22, 0x33, 0x44, 0x55};
uint8_t data_read[DATA_LENGTH] = {0};
uint8_t i;
SystemInit();
Delay_Init();
MAX7219_Init();
SPI1_Init();
W25QXX_Init();
// 将数据写入 FLASH
W25QXX_Erase_Sector(FLASH_ADDRESS);
W25QXX_Write_Page(data_to_write, FLASH_ADDRESS, DATA_LENGTH);
// 从 FLASH 中读取数据
W25QXX_Read(data_read, FLASH_ADDRESS, DATA_LENGTH);
// 在数码管上显示数据
for (i = 0; i < DATA_LENGTH; i++) {
MAX7219_Display_Byte(data_read[i]);
}
// 将数据通过串口发送给上位机
for (i = 0; i < DATA_LENGTH; i++) {
printf("%02X ", data_read[i]);
}
while(1);
return 0;
}
```
在这个例子中,我们使用了 W25QXX 模块来实现 SPI 接口与 FLASH 的通信,并使用 MAX7219 模块来控制数码管的显示。我们首先将数据写入 FLASH 中,然后从 FLASH 中读取数据,并将其显示在数码管上。同时,我们将数据通过串口发送给上位机。
阅读全文