OpenEdv-开源电子网

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

STM32Flash的擦除

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-8-3
在线时间
29 小时
发表于 2017-1-13 14:48:34 | 显示全部楼层 |阅读模式
30金钱
板子是探索者F407,我用实验34 FLASH模拟EEPROM实验读写最后一个扇区是可以的,但是在TCP Server那个例子中加入flash的读写保存客户端发送的IP地址,在擦除Flash的时候总是提示FLASH_ERROR_PROGRAM。这要怎么解决呀?

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-1-13 21:21:15 | 显示全部楼层
擦除之前禁止中断试试
回复

使用道具 举报

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-8-3
在线时间
29 小时
 楼主| 发表于 2017-1-16 11:10:51 | 显示全部楼层
正点原子 发表于 2017-1-13 21:21
擦除之前禁止中断试试

试过了,也不行。
                                if((recv_err = netconn_recv(newconn,&recvbuf)) == ERR_OK)         
                                {               
                                        OS_ENTER_CRITICAL(); //¹ØÖжÏ
                                        memset(tcp_server_recvbuf,0,TCP_SERVER_RX_BUFSIZE);  
                                        for(q=recvbuf->p;q!=NULL;q=q->next)  
                                        {
                                                if(q->len > (TCP_SERVER_RX_BUFSIZE-data_len)) memcpy(tcp_server_recvbuf+data_len,q->payload,(TCP_SERVER_RX_BUFSIZE-data_len));
                                                else memcpy(tcp_server_recvbuf+data_len,q->payload,q->len);
                                                data_len += q->len;         
                                                if(data_len > TCP_SERVER_RX_BUFSIZE) break;
                                        }
                                        OS_EXIT_CRITICAL();  
                                        data_len=0;         

                  
                                       OS_ENTER_CRITICAL();
                                       decodeReceiveData(tcp_server_recvbuf);
                                        OS_EXIT_CRITICAL();
                    
                    netbuf_delete(recvbuf);
                                }else if(recv_err == ERR_CLSD)  //¹Ø±ÕÁ¬½Ó
                                {
                                        netconn_close(newconn);
                                        netconn_delete(newconn);

                                        break;
                                }
                        }
                }


void decodeReceiveData(char *buf)
{
    u32 len = 0;
    char *IPBuf = NULL;
    u32 size = 0;
    u8 remot_addr[4];
    ip_addr_t ipaddr;
    OS_CPU_SR cpu_sr;
   
    IPBuf = (char *)mymalloc(SRAMIN, SIZE);
   
    memset(IPBuf, 0, SIZE);
    len = strlen(buf);
      
   // readFlashData();
   
    if(strstr(buf, "SERVERIP"))
    {
        memcpy(connectInfo.localIP, buf+strlen("SERVERIP")+1, len-strlen("SERVERIP")-1);
      
        printf("%s\r\n", connectInfo.localIP);
        
        size = sizeof(connectInfo.localIP)/4 + ((sizeof(connectInfo.localIP)%4)?1:0);
        printf("strlen len = %d, sizeof len =%d, flash size = %d\r\n", strlen(connectInfo.localIP), sizeof(connectInfo.localIP), size);
        //OS_ENTER_CRITICAL();       
        STMFLASH_Write(FLASH_IP_INFO_ADDR, (u32*)connectInfo.localIP, size);
       // OS_EXIT_CRITICAL();       
        ipaddr.addr = iptoint(connectInfo.localIP);
        
        remot_addr[3] = (uint8_t)(ipaddr.addr >> 24);
                remot_addr[2] = (uint8_t)(ipaddr.addr >> 16);
                remot_addr[1] = (uint8_t)(ipaddr.addr >> 8);
                remot_addr[0] = (uint8_t)(ipaddr.addr);
        printf("decodeReceiveData ú%d.%d.%d.%d ipaddr = %u\r\n",remot_addr[0], remot_addr[1],remot_addr[2],remot_addr[3], ipaddr.addr);
    }
   
   
    printf("Write to flash down\r\n");
   
//    OS_ENTER_CRITICAL();
     readFlashData();
//    OS_EXIT_CRITICAL();       
   
    if(IPBuf != NULL)
           myfree(SRAMIN, IPBuf);
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 04:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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