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

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)

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值