完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 jx1010129192 于 2015-11-17 18:32 编辑
先附上个人理解吧,刚刚开始学,出错之处欢迎指正: STM32端口配置寄存器GPIOx_LCKR可以用来锁定重要端口的配置,写入正确序列后在锁定标记位LCKK=1期间,已锁定的端口配置不会因为外部干扰而使配置改变;这些可以通过以下程序段得到验证: u32 a,b; GPIOB->CRL=0x33333333; GPIOB->CRH=0x33333333;//先配置端口 GPIOB->LCKR=0x10001; GPIOB->LCKR=0x00001; GPIOB->LCKR=0x10001; a=GPIOB->LCKR>>16;//写入写序列,同时写入希望锁定的端口位(B0端口) b=GPIOB->LCKR>>16;//验证标记位确实为1 GPIOB->CRH=0x66666666; GPIOB->CRL=0x66666666;//写入新端口配置看B0端口是否被锁定(运行结果确实B0被锁定,无法更改,其他均可以更改) GPIOB->LCKR=0x00001;//更改一下LCKK试一下 a=GPIOB->LCKR>>16;//读出LCKK还是1,无法更改 GPIOB->CRH=0x66666666; GPIOB->CRL=0x66666666;//端口配置也是继续被锁定 以上为本人参考STM32使用手册自己操作实验结果,但是,发现一个问题,锁定只针对0~7端口有效,尝试锁定8~15端口时则自动跳转到0~7,但是LCKR寄存器显示锁定的端口正常,试了很久没有找到原因,希望高人指点一二。 今天偶尔翻到了配套库函数,然后直接引用库函数源代码,经过试验,发现还是只有低8位有效,高位则自动跳转到低位对应位,下面是库函数源代码: ** * @brief Locks GPIO Pins configuration registers. * @param GPIOx: where x can be (A..G) to select the GPIO peripheral. * @param GPIO_Pin: specifies the port bit to be written. * This parameter can be any combination of GPIO_Pin_x where x can be (0..15). * @retval None */ void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { uint32_t tmp = 0x00010000; /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_PIN(GPIO_Pin)); tmp |= GPIO_Pin; /* Set LCKK bit */ GPIOx->LCKR = tmp; /* Reset LCKK bit */ GPIOx->LCKR = GPIO_Pin; /* Set LCKK bit */ GPIOx->LCKR = tmp; /* Read LCKK bit*/ tmp = GPIOx->LCKR; /* Read LCKK bit*/ tmp = GPIOx->LCKR; } 如有错误之处,欢迎指正 |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1168 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1105 浏览 2 评论
2203 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1297 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1718 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 02:07 , Processed in 0.567457 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号