OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3943|回复: 6

救助:想要实现功能,串口输入写到24c02再从24c02读出写到w25q128,最后从w25q128读出到串口并输出,过程中数据会丢失,附图和..

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-6
在线时间
7 小时
发表于 2019-4-6 13:26:31 | 显示全部楼层 |阅读模式
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "spi.h"
#include "w25qxx.h"
#include "24cxx.h"

int main(void)
{
        u8 t;
        u8 m;
        u8 len ;       
        u8 TEXT_Buffer[USART_REC_LEN];
        u8 datatemp1[USART_REC_LEN];

        u8 datatemp2[USART_REC_LEN];
        u32 FLASH_SIZE;       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//
        delay_init(168);    //
        uart_init(115200);        //
       
        LED_Init();                                        //
        AT24CXX_Init();                        //
        W25QXX_Init();                //
       
               
        while(AT24CXX_Check())//
        {
                LED0=!LED0;//
        }
        while(W25QXX_ReadID()!=W25Q128)                        //
        {
                LED1=!LED1;                //
        }       
        while(1)
        {
                        if(USART_RX_STA&0x8000)
                        {
                                len=USART_RX_STA&0x3fff;//
                        printf("\r\n您发送的消息网为:\r\n");
                                for(m=0;m<len;m++)
                                        {
                                        TEXT_Buffer[m] = USART_RX_BUF[m] ; //将串口数据写到TEXT_Buffe(个人认为是这一步有问题)
                                        }
                                        AT24CXX_Write(0,(u8*)TEXT_Buffer,len);//
                                        AT24CXX_Read(0,datatemp1,len);//
                                        FLASH_SIZE=16*1024*1024;                                                                                                                //
                                        W25QXX_Write((u8*)datatemp1,FLASH_SIZE-100,len);          //
                                        W25QXX_Read(datatemp2,FLASH_SIZE-100,len);                                        //
                                for(t=0;t<len;t++)
                                        {
                                                USART_SendData(USART1,datatemp2[t]);                                 //
                                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//
                                        }       
                        printf("\r\n\r\n");//
                        USART_RX_STA=0;
                        }
                }
        }       

发送文字会出现乱码 发送数字会丢失首位。直接用串口通信没问题,工程中加入IIc和SPI通信就会出错  个人认为是数据类型不匹配 但是不会改 求帮忙。


1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-6
在线时间
7 小时
 楼主| 发表于 2019-4-6 16:54:49 | 显示全部楼层
其中的fe:fff是spi通信时返回串口的字符  它与应该输出的字符串有重叠(个人估计),现在问题是为什么spi通信会向串口发送fe:fff
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-6
在线时间
7 小时
 楼主| 发表于 2019-4-6 18:02:33 | 显示全部楼层
问题解决  在w25qxx.c文件  为监测flash擦除情况向串口打印了一串字符 注释掉就可以了
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-6
在线时间
7 小时
 楼主| 发表于 2019-4-6 18:06:03 | 显示全部楼层
我在其中加入了lcd显示  想要把每次传输的数据通过lcd显示  发现LCD_ShowString()函数  不能显示汉字并且在lcd显示屏上显示字符时每次不能擦除 只能
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-6
在线时间
7 小时
 楼主| 发表于 2019-4-6 18:08:06 | 显示全部楼层
接上面  只能刷新 比如上次显示woaini 如果下次输入nihao就会显示nihaoi  除非每次输入都不小于上次输入的字符
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2019-4-6
在线时间
7 小时
 楼主| 发表于 2019-4-6 18:09:06 | 显示全部楼层
这个问题明天解决吧  一个新手自顶
回复 支持 反对

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-8 09:04:50 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 18:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表