🤓🤓🤓
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
- 先不必理会