加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解决flash不能写入单个字节小记

发布时间:2020-12-15 20:06:28 所属栏目:百科 来源:网络整理
导读:void program_data (u16 flash_addr,u8 buffer [] ,u8 len) { u8 i,flagstatus = 0x00 ; // u16 address; // int8_t trycnt=1; // retry_lbl: // if(trycnt-- = 0) return (0); FLASH-CR1 = (u8)(~ 0x01 ); FLASH-CR1 |= (u8) 0x00 ; // address = flash_add
void program_data(u16 flash_addr,u8 buffer[],u8 len)
{
    u8 i,flagstatus = 0x00;
 // u16 address;
// int8_t trycnt=1;
    
// retry_lbl:
// if(trycnt-- <= 0) return (0);
   
        FLASH->CR1 &= (u8)(~0x01); 
    FLASH->CR1 |= (u8)0x00;

// address = flash_addr;
    for(i = 0; i < len; i++)
    {
        clr_watchdog(NULL);
        /* Unlock Program memory */
        FLASH_Unlock(FLASH_MEMTYPE_PROG);
        *((u8 *) flash_addr) = buffer[i];
        while (flagstatus == 0x00)
        {
            flagstatus = (u8)(FLASH->IAPSR & ((u8)(0x04) |(u8)(0x01)));
            //timeout--;
        }
        FLASH_Lock(FLASH_MEMTYPE_PROG);
        flash_addr++;
    }
  
// address = flash_addr;
 /* for(i = 0; i < len; i++)
 {
 if(*((u8*) address) != buffer[i]) 
 goto retry_lbl;
 address++;
 }
 return 1;*/
}
void program_data(u16 flash_addr,u8 buffer[],u8 len)
此函数是在dev_ctrl.c里,调用函数是在up_date.c里面。在
up_date.c里面没有申明此函数,因此会产生单字节,或者多字节写不进去的问题。
被化为注释的代码是用来读出判断用的,写入和读出的不一样就会重新写入。
另外注意void是没有返回值的,在此函数里return 1 是编译通不过的。
想编译通过应该修改为:
u8 program_data(u16 flash_addr,u8 buffer[],u8 len)

两天了问题解决了,解决问题要有耐心。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读