STM32复习笔记(五) —— GPIO锁定机制

1.GPIO 锁定机制

锁定机制可以锁定 IO 口的配置,锁定一个端口位之后,直至下一次复位之前,将不能再更改端口位的配置

2.本例程软件设计思路

1)初始化时即锁定 GPIOB 的 GPIO_Pin_0 配置
2)确认锁定后再尝试修改 GPIOB 的 GPIO_Pin_0 配置为推挽输出模式,10MHz

GPIOx CRL and CRH 寄存器复位值为 0x44444444,即默认浮空输入模式,所以锁定后引脚当前的配置为默认配置,如尝试修改不成功,即表明锁定机制生效

3.代码编写

于 main.c 中编写代码

#include "stm32f10x.h"#define  USE_GPIO_LCKR  1 //1锁定 0不锁定typedef enum
{S_GPIO_Mode_OUT     = 0x01, //输出, 速率 10MHzS_GPIO_OType_PP     = 0x00  //通用推挽输出}GPIOA_Config_TypeDef;int main(void)
{//GPIO_Pin_0 配置uint32_t spinposl = 0x00;  #if USE_GPIO_LCKR//读写 LCKR 寄存器uint32_t stmp = 0x00;
#endif#if USE_GPIO_LCKR/* --------- 锁定 KEY IO 口 配置 --------- --------- --------- - *///GPIOB GPIO_Pin_0 的配置锁定GPIOB->LCKR |=  ((uint32_t)0x01 << spinposl);//写序列GPIOB->LCKR |=  ((uint32_t)0x01 << 16);GPIOB->LCKR &= ~((uint32_t)0x01 << 16);GPIOB->LCKR |=  ((uint32_t)0x01 << 16);stmp = GPIOB->LCKR;stmp = GPIOB->LCKR;//确认已锁定,锁定的配置为复位值 (即 KEY IO 当前配置为浮空输入模式)if(0x01 == stmp)
#endif{/* --------- KEY IO 口 配置 --------- --------- --------- ------ *///开启 GPIOB 时钟RCC->APB2ENR |= ((uint32_t)1 << 3);//输出模式,10MHzGPIOB->CRL &= ~((uint32_t)0x03 << (spinposl * 4));GPIOB->CRL |=  ((uint32_t)S_GPIO_Mode_OUT << (spinposl * 4));//推挽输出模式GPIOB->CRL &= ~((uint32_t)0x03 << ((spinposl * 4) + 2));GPIOB->CRL |=  ((uint32_t)S_GPIO_OType_PP << ((spinposl * 4) + 2));}while(1);
}

4.编译及仿真

点击编译,如无错误可进入仿真界面


打开 System Viewer - GPIO - GPIOB 查看 GPIOB 各个寄存器状态

运行前 CRL and CRH 寄存器为复位值 0x44444444

点击运行,锁定机制已生效,但 CRL 寄存器值仍保持复位值

停止并退出仿真,将锁定机制去除,编译后再进入仿真,点击运行


可见,CRL 寄存器值变为 0x44444441,此时锁定机制并未开启

查阅 CRL 寄存器说明


可知 GPIOB 的 GPIO_Pin_0 已配置为推挽输出,10MHz,结果与预想一致

STM32复习笔记(五) —— GPIO锁定机制相关推荐

  1. 模拟电子线路复习笔记(五) —— 低频功率放大器

    模拟电子线路复习笔记(五) -- 低频功率放大器 本文是对模电的第五章的低频功率放大器知识点的笔记总结.全文手写,附有例题解析,帮助加深理解. 1.知识点总结

  2. STM32复习笔记(十八) —— 高级定时器(输出比较)

    STM32复习笔记(十八) -- 高级定时器(输出比较) 1.配置步骤 1)选择计数器时钟 (内部,外部,预分频器) 2)将相应的数据写入TIMx_ARR and TIMx_CCRx寄存器中 3)可设 ...

  3. 数理统计复习笔记五——假设检验之显著性检验

    一.基本概念 在统计中,我们把需要用样本去推断"正确"与否的命题称为一个假设.当然,假设是可以关于参数的,也可以是关于分布的. 通过样本对一个假设作出"对"或& ...

  4. Struts2学习笔记(五)之异常处理机制

    我们在知道在软件开发中的异常处理是很重要的,作为成熟的MVC框架的Struts2也提供了异常处理处理机制,对于一场处理:用户发送请求-->Action控制器-->发现相应的异常--> ...

  5. Sqlite学习笔记(五)SQLite封锁机制

    概述 SQLite虽然是一个轻量的嵌入式数据库,但这并不影响它支持事务.所谓支持事务,即需要在并发环境下,保持事务的ACID特性.事务的原子性,隔离性都需要通过并发控制来保证.那么Sqlite的并发控 ...

  6. 操作系统复习笔记(五)

    14.从"互斥","空闲让进","有限等待"3个方面讨论它的正确性.若正确,则证明之.若不正确,说明理由. program sample; ...

  7. 2023 hnust 湖南科技大学 大三下 嵌入式 期中考试复习笔记

    前言 ★:重点 ✦:猜测考点,自己瞎画了很多 ※:补充内容 ❓:还没搞懂的 内容主要来源:教材.PPT.百度百科.AI 重点来源:4-6班 感谢:lyf,lqx 总结得很草率,因为没听过课,也玩不懂 ...

  8. 郑莉老师c++第五版 复习笔记

    本文是郑莉老师c++第五版的复习笔记 文章目录 第0章:学习怎么学习 先修正下之前关于学习的错误认识 1.理科一定要学系统课,不要零零碎碎的学.零零碎碎就算学几十个小时反而也是浪费时间还会误入歧途. ...

  9. 【XJTUSE项目管理复习笔记】第五章 软件项目成本管理

    仅供学习参考,禁止商用与转载 项目管理复习笔记 第五章 软件项目成本管理 项目成本管理的主要过程 项目成本管理:包括用来确保在批准的预算范围内完成项目的必要过程 项目成本管理的主要过程:计划成本管理➡ ...

最新文章

  1. Serverless 下的微服务实践
  2. 每日一皮:死循环的深刻理解...
  3. 1027:输出浮点数
  4. spring+redis自主实现分布式session(非spring-session方式)
  5. iOS弹窗UIAlertController的使用
  6. mybatis--关于接口参数注解的几个小问题
  7. 电路布线问题的动态规划实现(java)
  8. GAN的评价图像评价指标(IS和FID)
  9. 搭建测试环境详细步骤
  10. 访问php网页显示源代码_关于PHP中获取网页源代码的说明
  11. android绘制半圆弧线_android实现简单圆弧效果
  12. 九亿少女的梦(python信息处理)
  13. 升级IOS10 出现的兼容性的问题
  14. Linux Github 使用 ssh 登录及推送 - 一站式教程
  15. style计算机词汇,法语词汇学习:计算机及网络词汇(3)
  16. 《我的菜谱》-西红柿炒鸡蛋
  17. docker 命令大全
  18. 类的加载过程(生命周期)
  19. java备忘录代码和解释_Java备忘录
  20. 机器学习-利用信息熵来学习如果分辨好西瓜

热门文章

  1. python中and和or的惰性求值特点_Python 惰性求值
  2. App推广中常用名词
  3. 用Eclipse读取excel中全部数据
  4. js 比较啷个日期的大小
  5. 如何将音乐复制到您的Android手机
  6. 《从工业化到城市化》
  7. 2018 工作日节假日字典表
  8. 格林函数求解泊松方程介绍
  9. win10开机慢怎么解决_win10开机速度变慢的解决方法教程
  10. 能耗在线监测系统在酒店节能管理中的应用