IAR FOR MSP430 能不能对430的Flash擦出操作仿真?

我的程序如下:voiderase_Flash(char*add){//InitializeFlashpointerFCTL1=FWKEY+ERASE;//SetErase... 我的程序如下:

void erase_Flash(char* add)
{
// Initialize Flash pointer
FCTL1 = FWKEY + ERASE; // Set Erase bit
FCTL3 = FWKEY; // Clear Lock bit
_DINT();
*add = 0; // Dummy write to erase Flash segment
while(FCTL3 & BUSY); //等待擦出完成
_EINT(); //允许中断
FCTL1=FWKEY;
FCTL3 = FWKEY + LOCK; // 锁定
}

这个程序是按照官方Demo来的,在IAR上面仿真运行的时候,只能擦出 add这一个字节,而不是infoA这一段。求解
add的值是0x1080,运行的时候只擦出0x1080对应的字节
而修改为0x1081的时候就只擦出0x1081对应的字
展开
 我来答
百度网友1f3b461
推荐于2016-09-09 · TA获得超过242个赞
知道小有建树答主
回答量:164
采纳率:100%
帮助的人:83.3万
展开全部
这个你必须要用unsigned int类型做为参数。
如下:
void erase_Flash(unsigned int * add)
{
// Initialize Flash pointer
FCTL1 = FWKEY + ERASE; // Set Erase bit
FCTL3 = FWKEY; // Clear Lock bit
_DINT();
*add = 0; // Dummy write to erase Flash segment
while(FCTL3 & BUSY); //等待擦出完成
_EINT(); //允许中断
FCTL1=FWKEY;
FCTL3 = FWKEY + LOCK; // 锁定
}
追问

我按照你的修改了,结果就是这个样子了...


我想知道是不是我软件设置问题还是软件版本问题?我的5.3的。

追答
flash的擦除是按段进行的。
你要定义下你要擦除的是哪个段

我给你个完整的:
擦除第一段:
unsigned int *adr = (unsigned int*)0x1000; //这个必须要先定义初值,代表你要擦除的段
FCTL2 = FWKEY + FSSEL0 + FN1;
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*adr = 0;
FCTL1 = FWKEY + WRT;
while(BUSY&FCTL3);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
以上会将1080之前的全部擦除
如果你要将第二段擦除,用如下代码:
adr = (unsigned int*)0x1080;
FCTL2 = FWKEY + FSSEL0 + FN1;
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*adr = 0;
FCTL1 = FWKEY + WRT;
while(BUSY&FCTL3);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;

你的问题是没有定义一个初值。

想要IAR FOR 5.5破解版的,请加入这个群:
MSP430设计群2
27726714
我是管理员。
意法半导体(中国)投资有限公司
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式