STM32学习记录2 1.26

2023-11-08

/*本人为纯纯初学者,水平非常低,写文章只是为了记录学习经历,并且输出文字加强理解与记忆。本文十分不严谨,只具参考作用,可能具有误导性,请谨慎阅读。如果各位dalao发现错误,欢迎友善的指正、建议与讨论。初入CSDN,对平台的规范不是很熟悉,还请多多包容,感谢!*/

        回复一下上一篇文章遇到的问题,就是配置没有同步调整,修改ODR的同时也要修改对应CLR的配置。

        想具体总结一下点灯的流程。点灯之前我们要熟悉stm32的位操作,即可以通过C语言直接操作底层的特性对32位一个的寄存器每一位进行置1,置0的操作。这种操作主要是通过位运算进行的。

假设我们有一个寄存器GPIO_ODR=*(unsigned int*)0x...,该寄存器其实包含了32个位(0-31)

        如图,其中16位-31位是保留的,我们如果直接令GPIO_ODR=0,实际的操作就是让0-15位全都置0,等于1也是类似的效果,无法直接操作到位。因此我们需要引入位操作,例如让GPIO_ODR=(1<<10),可以形象化地理解为先让第0位(暂且将第X位当作从0开始XD)等于1,然后将这个1向左移动10位到达第10位,即实现了将第十位设置为1的功能。其他位同理。

        通过位运算我们就可以单独操作位了。但这样有两个缺陷,一是一次只能操作一个位,二是不能保留之前操作后的结果。因此我们需要引入”或上等于“(|=)和“与上等于”(&=)。通过这两种特殊的等于,我们将之前的位数情况也纳入计算范围,实际实现结果是特殊等于号之后的操作与之前的情况进行“或运算”或者“与运算”后的情况。例如:

         我们想将第二位设成1,同时保留第四位上的1,如果熟悉或运算和与运算的真值表,可以想到通过或运算解决,如下:

 通过计算可得

        这样就实现了在保留原数值的情况下设置1的功能,同样的, 如果我们想将第二位上的1清除,可以这样:

         通过与运算与取反运算的结合可以实现对特定位的清除功能,这里的取反相当于技巧性地将括号中的内容变成 ”将0左移XXX位“ 。

        因此我们可以得出结论,|=()可以用来设置某一位的高电平1,&=~()可以用来清除某一位的高电平1,并且均不影响其他位的数据。有了这个工具,我们就可以灵活地操作寄存器了。

        接下来我们就可以通过对相关寄存器中相关位的高低电平进行操作来点灯了。

        首先是配置时钟,打开相应寄存器的使能。通过原理图,我们可以发现我们的RGB是由三个GPIO控制的,每一个GPIO控制一种颜色

 (使用的是野火的开发板)

        例如我们需要绿灯亮,则需要打开PB0的时钟开关。PB0就是GPIOB上的一个端口,而GPIOB搭载在APB2总线上,所以我们找到APB2外设时钟使能寄存器

         按照下面的说明(没截到),置1是打开,置0是关闭。因此我们需要对第三位IOPB置1,使GPIOB的时钟使能打开。在AHB找到时钟RCC的基地址,加上偏移地址0x18,就找到了APB2ENA这个寄存器。用I=将第三位设成1:

 

 就完成了对GPIOB的使能。

第二步是配置PB0为推挽输出,过程类似,找到PB0的基地址,加上偏移地址,找到端口配置寄存器,按下面的说明进行位操作,通过四位一组的单元配置GPIO的输入输出模式。

 这里注意两点。第一就是一开始的清零,不然可能出现没有设置ODR灯泡就亮了的情况;第二是格式的规范,这些括号叠加看似没有用,但表达了更多的信息(例如4*0表示四个一组),修改起来也比较方便。规范的格式在实战中很重要(弹幕里说的哈哈哈)

最后就是配置ODR了,通过调整ODR输出高低电平,让灯泡亮起来。我们观察LED的原理图可以发现ODR输出低电平的时候电流才会流过灯泡,相当于进行清零操作。还是老步骤:

 (那个h是翻译错误)

 就可以点亮绿灯了。类比一下也可以点亮红灯和蓝灯,然后凑在一起,就可以成为一个合格的点灯工程师啦(bushi

所有总结基于野火的开发板入门网课,结合了一丢丢自己的实践经验。还学习了GPIO的几种输出模式和固件库究竟是什么,等学完了下次再进行整理吧~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32学习记录2 1.26 的相关文章

随机推荐

  • 智能指针之weak_ptr06

    一 weak ptr 看名字就知道 他是一个弱引用 他的存在是为了辅助shared ptr的循环引用问题 它不占用引用数 只能通过shared ptr或者weak ptr构造赋值 它没有重载 和 gt 运算符 因此不可以直接通过 weak
  • hvv 文件上传和文件包含考点

    天眼如何判断文件上传漏洞是否成功 数据包分析 观察客户端请求数据 是否包含webshell流量特征 观察服务器返回信息 是否有 上传成功 或 success upload 等信息提示 尝试寻找上传的文件 访问上传的文件看是否存在 查看文件上
  • Java的数据类型及变量

    一 变量 内存存储的是运行中程序的数据 eg 我有10块钱 买早餐花了6元 问我现在还有多钱 计算机 1 存储数据 2 CPU取出来 参与运算 3 结果更新内存 变量的本质 内存中的一个存储空间 另一种说法 程序运行过程中 其值可以发生改变
  • Java定时任务技术分析

    从零打造项目 系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建 SpringBoot集成Mybatis项目实操 SpringBoot集成MybatisPlus项目实
  • 商汤提出解偶检测中分类和定位分支的新方法TSD,COCO 51.2mAP

    目前很多研究表明目标检测中的分类分支和定位分支存在较大的偏差 论文从sibling head改造入手 跳出常规的优化方向 提出TSD方法解决混合任务带来的内在冲突 从主干的proposal中学习不同的task aware proposal
  • IPD简介

    目录 IPD是什么 IPD流程 做正确的事 1 市场调研 2 需求管理 正确地做事 第一阶段 概念阶段 第二阶段 计划阶段 第三阶段 开发阶段 第四阶段 验证阶段 第五阶段 发布阶段 第六阶段 生命周期阶段 IPD与项目管理 项目管理 IP
  • 全程软件测试(十三):静态百盒测试-代码检查/走查——读书笔记

    代码检查与走查是人工测试的两种主要方式 本次主要介绍两种方式的相似点 不同点将在后面详细介绍 两种方式的相似点如下 1 二者均需要建立小组来研读特定程序 使用这两种方式的参与者都需要完成准备工作 准备工作是参加 头脑风暴 会议 会议的主旨是
  • uni-app 环境配置,uni.request封装,接口配置,全局配置,接口调用的封装

    1 环境配置 可参考uni 官网的环境配置 common文件夹下新建config js let url config if process env NODE ENV development 开发环境 url config https com
  • Mybatis-Plus高级查询LambdaQueryWrapper&QueryWrapper

    目录 前言 Wrapper 查询构造器 查询条件 前期准备 查询条件 allEq eq ne gt ge lt le between notBetween like notLike likeLeft likeRight isNull 空值查
  • Python3 使用psycopg2模块 批量写入数据到PostgreSQL数据库(最强输出速度,单机数据库3000W数据写入最多180秒)

    Python3 使用psycopg2模块 批量写入数据到PostgreSQL数据库 最强输出速度 单机数据库3000W数据写入最多180秒 1 本文知识点 1 将string或者list类型的数据转换为IO缓冲区中的str类型 指定格式 2
  • C++中对象创建与释放

    创建对象有以下四种形式 include
  • 一毛一条的接码平台_搭建一套基于 Groovy 规则引擎的业务风控平台

    黑灰产在互联网领域盛行 从反面推动了业务安全反欺诈领域的快速发展 互联网SAAS服务产品响应市场不断创新 也决定了业务风险的多样性 笔者所在财税领域常见的非财税业务互联网风控场景包括登陆注册 短信接口 营销活动 渠道引流推广 交易和支付等
  • 程序员如何逆袭,达到财富自由?

    程序员逆袭达到财富自由有以下几条路 1 加入独角兽公司 拿到大量期权 并坚守到上市套现 2 找到靠谱的创业公司和诚信的创始人 拿到百分比左右的股份 坚守到出售或者上市 3 通过技术创业 公司出售或者上市 4 建立影响力 通过技术咨询 自媒体
  • 目标检测中的MAP(无抄袭)

    个人理解 如果写的有问题可以留言交流 转载请标明出处 谢谢 参考链接 内含代码 https github com rafaelpadilla Object Detection Metrics 人家写的比我好 我只是用中文把理论小总结一下 懒
  • Transformer综述1——《A Survey on Visual Transformer》

    A Survey on Visual Transformer 摘要 将视觉Transformer应用到不同的任务中 分析优缺点 回顾自注意力机制 背景介绍 多层感知和全连接层是经典的神经网络 有多线性层和非线性激活函数 卷积神经网络引入卷积
  • STM32外设系列—DHT11

    本文程序暂时存在问题 显示的温湿度不正确 如有急需 可私信 文章标题 一 DHT11简介 二 数据手册分析 2 1 接口说明 2 2 串行通信说明 2 2 1 单总线通信 2 2 2 单总线传输数据位定义 2 2 3 时序图 三 DHT11
  • sringboot整合rabbitmq

    一 基本概念 生产者 Producer 产生数据发送消息的程序是生产者 交换机 Exchangs 交换机是 RabbitMQ 非常重要的一个部件 一方面它接收来自生产者的消息 另一方面它将消息推送到队列中 交换机必须确切知道如何处理它接收到
  • 人工神经网络和神经网络,人工神经网络排名第一

    当今人工神经网络界的顶尖人物 5 Donald O Hebb Hebbian learning John J Hopfield Hopfield NN classic recurrent NN Stephen Grossberg Gross
  • BUCK电路分析设计(一)/备忘

    用于DC DC转换的降压型BUCK电路如图所示 基本工作原理为 输入一占空比为D的脉冲信号 当信号低电平时PMOS开启 NMOS关闭 电源通过PMOS 流经电感 并对电容与负载充电 电感电流线性上升 斜率为 VIN VO L 当信号为高电平
  • STM32学习记录2 1.26

    本人为纯纯初学者 水平非常低 写文章只是为了记录学习经历 并且输出文字加强理解与记忆 本文十分不严谨 只具参考作用 可能具有误导性 请谨慎阅读 如果各位dalao发现错误 欢迎友善的指正 建议与讨论 初入CSDN 对平台的规范不是很熟悉 还