内部Flash的读写

工程下载地址

原理:
在内部FLASH最后一块中作为保留参数,当读到第一字节为HEAD_FLAG标志后,第二字节自加1,第三字节自加2,第四字节自加3,等待按键按下重启。

#define HEAD_FLAG 0x5a
int main(void)
{
    uint32_t addr;
    uint32_t pg_size;
    uint32_t pg_num;
    char buf[30];
    uint32_t *p_value;
    uint8_t read_buf[100];
    uint8_t write_buf[100];
    simple_uart_config(0xff,9,0xff,11,false);
    uart_exit();
    init_key();
    
    
    pg_size = NRF_FICR->CODEPAGESIZE;
    pg_num  = NRF_FICR->CODESIZE - 1;    // Use last page in flash
    
            // Start address:
    addr = (pg_size * pg_num);
    sprintf(buf,"pg_size:%d-pg_num:%d-addr:0x%x\r\n",pg_size,pg_num,addr);
    simple_uart_putstring((const uint8_t *)buf);
    
    flash_reads(read_buf,addr,4);
    sprintf(buf,"0x%02x-0x%02x-0x%02x-0x%02x\r\n",read_buf[0],read_buf[1],read_buf[2],read_buf[3]);
    simple_uart_putstring((const uint8_t *)buf);
    if (read_buf[0] ==HEAD_FLAG)
    {
        memcpy(write_buf,read_buf,4);
        write_buf[1]+=1;
        write_buf[2]+=2;
        write_buf[3]+=3;
    }else{
        write_buf[0]=HEAD_FLAG;
        write_buf[1]=0x0;
        write_buf[2]=0x0;
        write_buf[3]=0x0;
    }
    flash_page_erase((uint32_t *)addr);
    nrf_delay_ms(1000);
    
    p_value = (uint32_t*)write_buf;
    flash_word_write((uint32_t *)addr, (uint32_t)p_value[0]);
    nrf_delay_ms(1000);
    while(1)
    {

        if (KEY1_STA() ==0)
        {
            nrf_delay_ms(20);
            if (KEY1_STA() ==0)
            {
                sprintf(buf,"device reset\r\n");
                simple_uart_putstring((const uint8_t *)buf);
                nrf_delay_ms(1000);     
                NVIC_SystemReset();
                while(1)
                {
                    simple_uart_putstring((const uint8_t *)buf);
                }
            }
        }

    }
}

效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值