打印
[STM8]

STM8S207Flash写保护疑问

[复制链接]
4212|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kill3393913|  楼主 | 2011-4-2 12:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
片子是STM8S207RBT6,用的是IAR的开发环境。在通过对FLASH_PUKR寄存器写入MASS密钥后可以成功解除对FLASH的写保护,但是当对Flash操作完以后,想重新对FLASH进行写保护,手册上说“应用程序可以在任何时刻通过清FLASH_IAPSR寄存器中的PUL位来重新禁止对FLASH程序区的写操作”。于是我在程序里这样做
FLASH_IAPSR &=~ MASK_FLASH_IAPSR_PUL;但是编译器报错,提示expression must be a modifiable lvalue 我换成直接对寄存器的PUL位来操作也不行。
后来我查了一下iostm8s207rb.h头文件里面对FALSH_IAPSR这个寄存器器的定义,发现是这样的__IO_REG8_BIT(FLASH_IAPSR, 0x505F, __READ, __BITS_FLASH_IAPSR);是不是表示这个寄存器是只读的,但是手册上明明说是可以对这个寄存器进行写操作的啊,至少可以对PUL位进行写操作。
沙发
kill3393913|  楼主 | 2011-4-2 12:43 | 只看该作者
有没有什么办法来清除PUL位来使能Flash的写保护,把头文件里的__IO_REG8_BIT(FLASH_IAPSR, 0x505F, __READ, __BITS_FLASH_IAPSR); 改为__IO_REG8_BIT(FLASH_IAPSR, 0x505F,__READ_WRITE, __BITS_FLASH_IAPSR);行不行,这样做的话会不会有其他问题

使用特权

评论回复
板凳
mcuisp| | 2011-4-2 13:03 | 只看该作者
可以直接写地址。或者自己定义一个。

使用特权

评论回复
地板
kill3393913|  楼主 | 2011-4-2 13:19 | 只看该作者
直接写地址是啥意思,是直接用指针操作符对该寄存器操作么,但是我不知道这个这个寄存器上的地址是不是0x505f,手册上写的该寄存器的偏移地址是0x05不知道和头文件定义里面写的0x505f是啥关系。

使用特权

评论回复
5
mcuisp| | 2011-4-2 13:22 | 只看该作者
手册里可以看出地址的。

使用特权

评论回复
6
kill3393913|  楼主 | 2011-4-2 13:25 | 只看该作者
手册上给的是地址偏移值,上面写的是0x05。不知道真实值是多少。我刚才把头文件里面的__IO_REG8_BIT(FLASH_IAPSR, 0x505F, __READ, __BITS_FLASH_IAPSR); 改为__IO_REG8_BIT(FLASH_IAPSR, 0x505F,__READ_WRITE, __BITS_FLASH_IAPSR);果然就可以了。正式吐血。

使用特权

评论回复
7
kill3393913|  楼主 | 2011-4-2 13:30 | 只看该作者
就是不知道这样改会不会有什么问题,如果确实是头文件定义错误的话,那么对IAR FOR STM8就太无语了。之前就发现头文件里有一处定位错误,把
#define MASK_UART3_SR_RXNE       0x20
#define MASK_UART3_SR_TC         0x40
定义成
#define MASK_UART3_SR_TC         0x20
#define MASK_UART3_SR_RXNE       0x40
导致使用上面两个宏来对UART3进行操作时出问题。

使用特权

评论回复
8
kill3393913|  楼主 | 2011-4-2 14:28 | 只看该作者
还有没有其他什么办法来对那个寄存器进行操作,我看到网上有一篇叫做“STM8S207单片机各模块的无库例程”上面的代码就有用FLASH_IAPSR &= ( uchar )(~( 1 << PUL ));直接对寄存器操作,用的也是IAR的开发环境,但是问什么我这边就不可以呢

使用特权

评论回复
9
mcuisp| | 2011-4-2 15:04 | 只看该作者
头文件是可以改的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

56

帖子

1

粉丝