好久不更新,今天弄了个FLASH的IAP自编程操作,,,
进行这节前一定一定要熟读FLASH章节.
首先,要做IAP操作要记得将配置字设置一下.
可以看到,最快捷的方式是将FWPEB位设置成Disable就好了.
其余设置自己领悟.
然后只要在程序中调用已经写好的库函数就好了.
举个栗子:
#define START_ADDR 0x00006400
#define PAGE_ADDR (START_ADDR / 1024)//一页为1K
uint32_t rbuf;
uint32_t Time;
int main(void)
{
while (1)
{
Time++;
if(ReadKey)//按键按下,将计时数值写入FLASH
{
IAP_ErasePage(PAGE_ADDR);
IAP_WriteWord(0, PAGE_ADDR, Time);
}
IAP_Read(&rbuf, START_ADDR + count, 1);//读出FLASH内容
printf("Time: %5d Flash: %5d ",Time,rbuf);//打印数据
}
}
这个程序,,,只是写大概意思,请自行补全…
编译,下载.
但是发现每次要写入FLASH的时候,,,单片机都复位了….
这是嘛回事.
跟踪发现,程序每次进行到这里就复位了.
使能FLASH操作单片机就进入了二次元.这是怎么回事.
折腾了一下午,,,最后发现手册里面如是说
程序要在SRAM里面运行才正常,,,,,
SRAM:怪我咯..
那么问题来了,怎样才能让代码在SRAM里运行呢…
很简单:
选中lib_flashiap.c文件,右键,选择Options for File ‘lib_flashiap.c’这个选项.
在Code/Const这里选择成IRAM1就好了.
点击确定,重新编译,烧录.
OK,IAP功能可以正常使用了