OpenEdv-开源电子网

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

stm32读写at45db写缓冲区和读缓冲区结果不一致?

[复制链接]

37

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2016-9-13
在线时间
73 小时
发表于 2017-10-19 20:01:19 | 显示全部楼层 |阅读模式
2金钱
写进buff,第二个参数是说明从哪个开始byte写入,也就是地址,第三个是写入多少个字节
void WriteBuff(u8 * buff,u16 bufaddr,u16 numofbyte,u8 buff12)
{
        u16 i;
        u8 op;
        buff=(u8*)malloc(8*numofbyte);
        for(i=0;i<numofbyte;i++)//&#184;&#248;êy×é&#184;3&#214;μ£&#172;òaD′μ&#189;buff&#214;D
        {
                buff=45;
        }
        while(BusyCheck()==0){}
        AT45_L;
        switch(buff12)
        {
                case 1p=WriteBuff1;break;
                case 2p=WriteBuff2;break;
        }
        spi_rw_byte(op);
        spi_rw_byte((u8)(bufaddr>>16));
        spi_rw_byte((u8)(bufaddr>>8));
        spi_rw_byte((u8)bufaddr);
        for(i=0;i<numofbyte;i++)
        {
                spi_rw_byte(buff);
        }
        AT45_H;
        for(i=0;i<numofbyte;i++)//í¨1y′&#174;&#191;ú°&#209;D′è&#235;μ&#196;D&#197;&#207;¢·¢&#203;í3&#246;à′£&#172;×÷&#206;a&#182;&#212;±è
        {
                USART_SendData(USART1,buff);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==0);
        }
        while(BusyCheck()==0){}
        free(buff);
}[/mw_shl_code]
传入指针,动态分配内存给数组分配空间。buff有528个bytes,第二个参数是说从哪个byte开始读,第三个参数是读几个byte,最后是确定读哪个buff

void ReadBuff(u8 * buff,u32 bufaddr,u32 numofbyte,u8 buff12)

{

        u16 i;

        u8 op;

        buff=(u8*)malloc(8*numofbyte);

        while(BusyCheck()==0){}

        AT45_L;

        switch(buff12)

        {

                case 1p=Buff1_Read;break;

                case 2p=Buff2_Read;break;

        }

        spi_rw_byte(op);

        spi_rw_byte((u8)(bufaddr>>16));

        spi_rw_byte((u8)(bufaddr>>8));

        spi_rw_byte((u8)bufaddr);

        spi_rw_byte(0xff);

        for(i=0;i<numofbyte;i++)

        {

                buff=spi_rw_byte(0xff);

        }

        AT45_H;

        for(i=0;i<numofbyte;i++)//í¨1y′&#174;&#191;ú°&#209;&#189;óê&#213;μ&#189;μ&#196;D&#197;&#207;¢·¢&#203;í3&#246;à′

        {

                USART_SendData(USART1,buff);

                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==0);

        }

        free(buff);

}

程序的问题是我用writebuff写超过40个数,就出错,readbuff用串口什么都不显示,少于40个数还能正常显示,找不清问题在哪了。谢谢


最佳答案

查看完整内容[请看2#楼]

发现问题了,因为用了动态内存分配,所以堆的大小不够,改成0x2000,可以出现想要的结果了。问题暂时解决了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

37

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2016-9-13
在线时间
73 小时
 楼主| 发表于 2017-10-19 20:01:20 | 显示全部楼层

发现问题了,因为用了动态内存分配,所以堆的大小不够,改成0x2000,可以出现想要的结果了。问题暂时解决了。
回复

使用道具 举报

37

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2016-9-13
在线时间
73 小时
 楼主| 发表于 2017-10-19 20:25:40 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-10-20 00:28:14 | 显示全部楼层
看数据手册
回复

使用道具 举报

27

主题

427

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4370
金钱
4370
注册时间
2017-5-30
在线时间
579 小时
发表于 2018-7-28 15:17:20 | 显示全部楼层

AT45是不是只能通过sram写入flash,不能直接写入flash?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 22:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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