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

查看: 9864|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版