你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 9786|回复: 7

STM8S105的flash读写问题

[复制链接]

1

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-4-7 15:42:20 | 显示全部楼层 |阅读模式
本人使用该型号单片机,写了一段基本的FLASH读写程序,把一个数组的值写入flash,然后再进行读取,通过串口发送到计算机显示出来,用以检测是否正确写入。但收不到任何内容。程序如下,求高手看看哪里出了问题。或者给小弟一个最基本的flash例程。
 
 #include
 
u8 a[FLASH_BLOCK_SIZE]@0x200;
u8 i,p=0;
u8 c;
u32 add,start_add,stop_add;
u16 block;
 
typedef enum { FAILED = 0, PASSED = !FAILED} TestStatus;
TestStatus OperationStatus;
FLASH_Status_TypeDef Status;
u16 timeout = 0x1000;
 
 
void UART2_Init(void)
{
        UART2_CR2=0;   //禁止发送和接收
        UART2_CR1=0;   //UART使能,M=0,8个数据位,禁止奇偶校验,
        UART2_CR3=0;   //LIN MODE 禁止,1个停止位,禁止SLK
       
        UART2_BRR2=0x00;      //波特率设置,9600,fmaster=2M=fhsi(16M)/8
        UART2_BRR1=0x0d;        //主意设置先BRR2,后BRR1
        UART2_CR2=0x2c;   //接收中断使能,发送使能,接收使能
}
 
void UART2_Send(unsigned char ch)
{
        while((UART2_SR&0x80)==0x00);
        UART2_DR=ch;
}
main()
{
        UART2_Init();
       
        FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
        FLASH_Unlock(FLASH_MEMTYPE_PROG);
       
        for(i=0;i
回复

使用道具 举报

1

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-4-7 16:43:43 | 显示全部楼层

RE:STM8S105的flash读写问题

怎么没有人回答啊?希望高手能来帮帮忙,看看问题出在哪?已经卡了好几天了,不知道哪错了
回复 支持 反对

使用道具 举报

3

主题

34

回帖

0

蝴蝶豆

中级会员

最后登录
1970-1-1
发表于 2012-5-3 22:33:42 | 显示全部楼层

回复:STM8S105的flash读写问题

回复 支持 反对

使用道具 举报

1

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-5-7 23:01:55 | 显示全部楼层

RE:STM8S105的flash读写问题

我认为你的问题出在块编程上面 , 对于flash的块编程应该从RAM中操作而不是 在FLASH中对FLASH读写 ,对FLASH的 块操作要拷贝到RAM 中才能成功
回复 支持 反对

使用道具 举报

1

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-5-7 23:02:43 | 显示全部楼层

RE:STM8S105的flash读写问题

我认为你的问题出在块编程上面 , 对于flash的块编程应该从RAM中操作而不是 在FLASH中对FLASH读写 ,对FLASH的 块操作要拷贝到RAM 中才能成功
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-24
发表于 2016-11-18 23:03:23 | 显示全部楼层
问题解决了吗?
我在STM8S208C8也是一样,写入后再读出来是正确的,先按块擦除,擦除的时候检查EOP事件的,没有发现问题。接下来在按块编程写入地址为0xBC00,长度为128个字节。写入的时候也检查了EOP事件,同样没有问题(发现有EOP事件的)。退出写函数后再读出结果正确。
可是问题是:当我把擦除函数和写入函数都注释掉不用了,只保留原来读出内容的函数,编译后下载运行却发现读出的内容,128个字节全是0。当然掉电也是一样读不出来写入的值。

到底是写入问题还是读出问题?写入的时候用库函数FLASH_WaitForLastOperation检查返回值为0x02(是正确的)。
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-24
发表于 2016-11-18 23:09:08 | 显示全部楼层
官方提供的例程都是片内EEPROM操作,没有片内的flash操作的例程(目前还没有找到),狗日的
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

初级会员

最后登录
2020-10-24
发表于 2016-11-19 12:00:54 | 显示全部楼层
问题已经搞定了。不是读也不是写的问题,是测试方法的问题。
原来我注释掉擦除和写函数后,需要重新编译代码,重新编译代码后必然需要通过stlink来下载到板子上,就在下载的时候把我上次写入的内容擦除了,再读当然只是空的了。
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版