初级会员

- 积分
- 83
- 金钱
- 83
- 注册时间
- 2014-9-11
- 在线时间
- 4 小时
|

楼主 |
发表于 2014-9-12 18:18:03
|
显示全部楼层
“锁定相应端口的某一位,也就是锁定控制寄存器CRL/CRH相应的4个位,在下次系统复位之前更改该端口该位的配置无效”
固件库里的程序和写序列大体是一致的,但有一处不太明白:
uint32_t tmp = 0x00010000; //假设这里GPIO_Pin=0x0001
tmp |= GPIO_Pin; //tmp=0x00010001
GPIOx->LCKR = tmp; //LCK0位置1,即选择该端口第0位;LCKK位置1,即写1
GPIOx->LCKR = GPIO_Pin; //LCKK位置0,即写0
GPIOx->LCKR = tmp; // ?(1)
tmp = GPIOx->LCKR; // ?(2)
tmp = GPIOx->LCKR; //读1
从语句上看,?(1)处应是LCKK位置1,即写1,但是执行后发现LCKR寄存器中LCKK位并未置1?
从语句上看,?(2)处应是读LCKK(已置1),但是执行后发现LCKR寄存器中LCKK位此时才置1,故猜测此处应该是先读0,然后将LCKK位置1,这样就和写序列一致了,只是不明白这个执行的先后顺序了?
|
|