STM32-GPIO

发布于:2024-04-10 ⋅ 阅读:(31) ⋅ 点赞:(0)

🤓🤓🤓

  • STM32 第一个外设

在这里插入图片描述

1

在这里插入图片描述

  • 对我们来说 和IO口没区别 ST公司非叫GPIO

2

在这里插入图片描述

2.1

在这里插入图片描述

  • 第二个是超频了 F1 72M 这翻转就36

2.2

在这里插入图片描述

  • 有cmos 和ttl两种
  • 数据手册里给出整个芯片最低电流为150ma 单个都这么大 早超了 可以有其他扩流方案 外接其他(继电器?)

在这里插入图片描述

  • FT的就是TTL

2.3

在这里插入图片描述

  • 电源引脚 带V的
  • 晶振引脚 低速那个32 就对应了频率
  • 复位引脚 脚位为7
  • 下载引脚 很多 有串口的 swd JTag
  • BOOT引脚 F1系列 有两 BOOT1 在PB2上 复用
  • GPIO引脚 P开头的都是
  • LQFP好像是封装模式 他这图里

在这里插入图片描述

  • 精英每组都是16个

3

在这里插入图片描述

  • 这两区别是 上下拉电阻 F1的只有输入的时候有
  • 左右来看 是内部和外部
  • 上下来看 是输入 输出
    在这里插入图片描述
  • 讲了 输入
  • 模拟输入和复用功能输入 可以看成 51里 第二功能
  • 模拟输入那 外设就是ADC DAC

在这里插入图片描述

  • 位设置 那个寄存器 是BSRR
  • 上面那两路都是通用输出 最上面是通过BSRR间接的
  • 最下面外设 比如串口

在这里插入图片描述

  • 介绍几个器件
  • 保护二极管 保护输入呢 过高或过低

在这里插入图片描述

  • 二极管有钳位作用 要加上这个电阻
  • 下面那个 -5v 一样道理
  • 保护二极管 是很弱的保护

在这里插入图片描述

  • 阻值是30k~50k I很小 所以弱的上下拉电阻

在这里插入图片描述

在这里插入图片描述

  • 简单来说 不相同就导通

4

在这里插入图片描述

  • 四个输入 四个输出 前面三个 作为通用输入
  • 完全浮空就是没有使用上下拉
    在这里插入图片描述
  • I方c数据 时钟引脚就用这个
  • 25ma 那个是最大输出电流

4.1

在这里插入图片描述

  • 再通过CPU读取IDR寄存器
    在这里插入图片描述
  • 这种情况下 空闲时就是高阻态 由后面决定
  • 好像上下拉电阻 这种情况下就是为了防止高阻态?
  • 和以前单片机那个上拉电阻有点不一样了 那个是为了 保证 1 和 0 正确
  • 这里更像是为了IO口状态确定 就好像本应该是混沌

4.2

在这里插入图片描述

  • 空闲时 外部高阻态 IDR 和 IO都是高电平

4.3

在这里插入图片描述

  • 为啥下拉 1 也对应1
  • IDR和 IO口 0
  • 这个vss就是地把

4.4

在这里插入图片描述

4.5

在这里插入图片描述

  • F1 在输出时 上下拉电阻 是关闭的 硬件决定
  • 配置为输出模式时 仍可以读取引脚高低电平
  • 这个括号内部 是针对其他系列的 F1 此时上下拉电阻不起作用
  • 要买上拉电阻 呜呜呜
    在这里插入图片描述
  • 输出控制里面有个取反

4.6

在这里插入图片描述

  • 控制输出的地方变了

4.7

在这里插入图片描述

  • 驱动能力强是 如 VDD直接连外部 没有经过电阻 单纯由电源控制

4.8

在这里插入图片描述

在这里插入图片描述

  • 开漏 外接上拉电阻 电源为5 V时 可以

5

在这里插入图片描述

  • 有七个
  • 每一组对应七个 x就是GPIO A~E

在这里插入图片描述

在这里插入图片描述

  • 高+低 64 位 GPIO一组16个引脚 1个引脚 要用4个位配置
  • CRL PA0 ~ PA7
    在这里插入图片描述

在这里插入图片描述

  • 用ODR来配置 不用IDR 估计占用着呢
    在这里插入图片描述
  • 再把第10个设置为1 就是PA10上拉输入了
  • 每一个位 对应1个IO口
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 都可以举例来学

在这里插入图片描述

在这里插入图片描述

  • 这里中断风险 指操作同一个寄存器

6

在这里插入图片描述

  • 选择时钟(有的用默认的) 开启时钟

  • 参数设置 比如GPIO工作模式

  • IO 除GPIO外 usart/uart 串口 把IO复用为串口的数据引脚

  • 中断 比如串口 有发送中断 和 接受中断

  • 后两可选

  • 针对所有外设

在这里插入图片描述

  • 比如串口从特定数据寄存器读取数据
  • 可选
  • GPIO 这个外设 用不到4

7

在这里插入图片描述

  • 一个宏 四个函数 HAL库提供
  • 3那个是翻转
  • 这不选择时钟 是因为GPIO挂载在总线上 随系列不同

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 就是介绍一下怎么使能的吧
    在这里插入图片描述
  • ADC和定时器 也是这么开的

在这里插入图片描述

  • 这是直接去function里面 找的 也可以搜

在这里插入图片描述

  • 7个寄存器
    在这里插入图片描述

  • GPIO 寄存器基地址 这旁边都是寄存器基地址 寄存器结构体 + 基地址

在这里插入图片描述

  • GPIO初始化相关结构体
  • 成员赋的值 不能随意 有参考

在这里插入图片描述

  • 最后一个是pin的断言测试

在这里插入图片描述

  • 输入模式 3个 加上下面五个 就8种工作模式了

在这里插入图片描述

  • 就在上面下面一点

在这里插入图片描述

在这里插入图片描述

  • WritePin 也可以从这找到

在这里插入图片描述

在这里插入图片描述

  • 再设置参数接受这个返回值

8

在这里插入图片描述

在这里插入图片描述

  • 不懂这个为啥是忽略的了
  • 2.88mA 比上面低 影响不大 亮度低一点
  • 蓝色的是有电源了

在这里插入图片描述

  • 输入是采集 输出是控制
  • 推挽可以高低电平 驱动能力强
  • 这个共阳 开漏也可以 高阻态相当断开 也就灭了

在这里插入图片描述

  • 开漏右边这个不行 左边这个估计行
    在这里插入图片描述

8.1

在这里插入图片描述

  • 直接复制的这个
  • 要编写LED驱动 要创建板级驱动文件 BSP

在这里插入图片描述

  • 保存到BSP/LED 里

在这里插入图片描述

  • 再创建分组把led.c 添加进来(不懂为啥创建分组 和不添加led.h)

在这里插入图片描述

  • 复制里面的 固定搭配

在这里插入图片描述

  • 防止led.h被重复包含和编译

在这里插入图片描述

  • 因为用PB5
  • 配置步骤前两步
  • 这没设置pull 用不上 不用管 就算设置了 好像也没用
    在这里插入图片描述
  • 这个横向分屏
    在这里插入图片描述
  • 开始灭着
  • 这机霸写 怎么在GPIO初始化前 写错了 没事居然
    在这里插入图片描述
  • 在把这个函数声明 放在.h里 方便后续调用

在这里插入图片描述

  • 这个PB5是红灯的

在这里插入图片描述

  • 那个led_int 那开始 出了个三角 类似这种 后来改了led.c 最后加个空行(其定义处)
  • 不懂这包含头文件的关系

在这里插入图片描述

  • 逗号后面加空格 代码规范

在这里插入图片描述

  • 又试了一下 翻转
    在这里插入图片描述
  • 1居然不行 0u也不行

8.2

  • 见开发指南
  • 这把红的定义成LED了
  • 有些为了增加移植性

9

9.1

在这里插入图片描述

  • 抖动期间 判断不了 是 1还是 0
  • 抖动时间一般 5~10ms
  • 除了软件消抖 还有硬件的

在这里插入图片描述

  • 1 3分开
  • 不按下是 高阻态 要通过上下拉来改变高阻态
  • 1 高阻态(所以下拉 把高阻态改成0) 后面类似
  • 3中通用输入 IO口电平不一样

在这里插入图片描述

  • 这是精英版的
  • 首先复制前面LED的文件夹
  • 然后BSP里添加 KEY文件夹
  • 新建key.c(并添加分组) 和 key.h

在这里插入图片描述

  • 速度没意义 这里采集
    在这里插入图片描述

在这里插入图片描述

  • 用的KEY1 PE3

在这里插入图片描述

9.2

  • 先不必理会

网站公告

今日签到

点亮在社区的每一天
去签到