较为理想的采样点配置 波特率保持 1Mbps
采样点 73.3%:
字
值
Prescaler
3
BS1
10
BS2
4
SJW
1
采样点 77.8%:
字
值
Prescaler
5
BS1
6
BS2
2
SJW
1
这一章开始我们将使用真正的大疆主控板来完成接下来的学习
这一章开始我们将使用真正的大疆主控板来完成接下来的学习
我这里采用的大疆 A 板, 它的参数如下
主控单元为: STM32F427IIH6 12MHz 晶振, 可配置最高主频
180MHz
CAN 发送: 把发送数据放到 CAN 发送邮箱中, 有它自主控制发送,
放进去就不管了. 我们用到的 STM32F427, 每条 CAN 总线上有 3
个发送邮箱 这也意味着, 考虑到发送需要时间, 我们在代码层面上,
最多只能同时朝总线灌3 个 can 帧, 再多就发不出去了
CAN 接收: 从接收队列(FIFO 队列)选择接收, 可配合中断使用
我们用到的 STM32F427, 每条 CAN 总线上有 2
个接收队列
这个实验中, 我们要利用 CAN 信号来点灯.
CAN1 自发自收
发送方发送一字节数据指明灯的序号
接收方接收后直接在中断函数中处理信息, 熄灭对应的灯,
直到下次指令重新点灯
用到的有关元件与对应引脚, 详细请参考大疆
A 型开发板用户手册
LED1-8: PG1-PG8, 低电平点亮
CAN1: PD0, P ...
这一章开始我们将使用真正的大疆主控板来完成接下来的学习
我这里采用的大疆 A 板, 它的参数如下
主控单元为: STM32F427IIH6 12MHz 晶振, 可配置最高主频 180MHz
与之前我们学习到的UART 通信协议一样, CAN
通信以及所有的通信协议都需要具有通信分层的思想, 物理信号层, 链路传输层,
应用数据层(可以回看之前 UART 的那一章)[[1.4 UART通信|1.4 UART通信]] #
CAN - Controller Area Network
CAN 的接线方式, 每个设备接出两根线 CAN_H 和
CAN_L, 不同设备的 CAN_H 相互接在一起, CAN_L
相互接在一起
CAN_H 和 CAN_L 通过两个 120Ω的电阻连接在一起, 将总线阻抗变成
60Ω, 主要有两个作用:
防止总线上传输的高频信号存在反射振铃效应导致信号不稳定
防止寄生电容导致信号响应速度变慢
在 CAN 通信中, 比特率(bps)等于波特率(symbol/s),
因为有效信息码元直接对应二进制码元
异步通信 – 物理层
还记得我们之前学习的 UART 通信吗? ...
使用 ADC 模块测电压
接线
既然是ADC有关实验, 那么我们不可避免的要使用电源进行测电压的操作
如果你在实验室, 你可以直接使用实验室的可调电源作为测量对象, 同理,
你也可以直接选用干电池
CubeMX
老动作来一套之后, 在 CubeMX 中选择开启 ADC1 的 IN4 通道,
这时你会发现 PA4
亮起
来到时钟树, 配置 ADC 的预分频器 PSC, 选择分频 6 倍, 因为这个 ADC
设备最高接受 14MHz
频率
## ADCs_Common_Settings
选项
含义
Mode
选择是否与其他 ADC 相互联系
Independent 表示这个 ADC1 单干不与 ADC2 联动
ADC_Settings
选项
含义
Data Alignment
数据对齐方式
DC 是 12 位,但数据寄存器 ADC_DR 是 16 位,
右对齐表示数据向右对齐, 常用右对齐.如果左对齐, 表示数据要左移 4 位,
相当于乘 16 倍
Scan Conversion Mode
扫描模式
如果你只有一个通道直 ...
模拟信号与数字信号
模拟信号
模拟信号是时间和数值上连续的信号
大自然中的大多数信息在人的感官尺度上都是模拟的,比如力的大小,
声音的响度,灯光的亮度模拟信号是可以取任意数值且连续的
数字信号
数字信号是时间和数值均离散的信号
时间离散:
不同的电子元件的处理速度不同,需要处理器等模块发送时钟信号,
来调控处理器以及其他模块读取处理生成数字信号
数值离散: 数值可认为是只有两个状态: 0, 1
数字信号也可以被认为是计算机等设备实际可以识别并操作的信号!
而连续的模拟信号可以在某些特定的离散时间点,通过一些硬件电路转化成离散的数字信号,这就是采样
ADC Analog to Digital
Converter
ADC - 模数转换器: 通过对输入的模拟信号进行测量,
将其分级转换成数字信号
ADC 的基本参数
ADC 的位数 x
ADC 的参考低电压 Vref-
ADC 的参考高电压 Vref+
ADC 转换
输出值模拟
其中 x 通常取 12
如果输入为 1.5v 高电平为 3.3v, 低电平为 0v, x 取 12
则通过公式计算得到 ADC 输出值为 1861, ...
学习记录
Unread3 个”未”开头的都不选,
选不带”未”的
警告二百不分家
看到”二百” 或”200” 就选对
看到”三”, “三十” 或”30” 就选对
看到”拘役”就选对
看到减速含义的就选对
看到”直接”的就选错
看到”追究” 就选对,
“不追究”就选错
看到”注销” 就选对,
“不注销”就选错
减分:
未记满 12 分的, 可学法减分, 一个周期内(一年), 最高可减 6 分
网上半小时一分, 公益一小时一分, 现场半小时两分 在上一记分周期内,
参加两次以上满分教育记录的不可进行学法减分
小车记满 12 分的, 要参加 7 天的满分教育学习, 网上 3 天, 现场 2 天,
自学 2 天 12 分学 7 天, 每 12 分加 7 天, 最多 60 天
小车 7 天, 大车 30天
一分:
不年检, 违规用灯, 违标违线, 不系安全带, 长宽高超限 #
三分: 不按规定放置警告标志 打电话, 不按车道行驶, 拥堵占道, 不让校车/行人
# 六分: 不按灯通行, 未挂警示标志 # 九分:
驾驶与准驾车型不符的机动车一次记9分,并可能面临200元至2000元罚款及行政拘留
高速, 城市 ...
这个实验中我们将实现呼吸灯
硬件电路连接
我们使用TIM3 CH1 (channel 1)来输出 PWM 波
单片机的最高输出电压是 3.3v
LED 正常降压 1.5v 以上, 电流约 5mA
经过算计, 电阻两端电压约为 1.8v, 我们需要 360Ω左右的电阻(上下不超过 5
倍都行, 即 180 - 1800Ω)
电阻色环: 4 色环颜色 220Ω = 红红棕金,330Ω =
橙橙棕金,1kΩ =
棕黑红金
多色环:
其实我自己实验的时候没有电阻也成功了…
CubeMX的配置
还是老样子, 配置出一个 cmake 工程
在 TIM3 中勾选使用内部时钟, 并且使能
CH1
将 TIM3
时钟如图配置
配置项
含义
说明
Prescaler (PSC)
预分频值
就是公式里的 PSC。填 7199 = 输入时钟 ÷ 1000
Counter Mode
计数模式
Up = 向上计数
Counter Period (ARR)
自动装载值
就是公式里的 ARR。填 99 = 数100 个后溢出(10ms)
Internal Clock ...
学习记录
UnreadPWM 波
脉宽调制(Pulse
Width Modulation,
PWM)
他本质上是一种方波, 具有如下属性
周期: 一个周期所占用的时间, 图上是 4e-3s
频率: 周期的倒数, 也就是一秒钟有多少个完整的周期,
图上是 250Hz(1 / 4e-3)
占空比:
高电平持续时间占一周期的比值, 这里是
25%(1/4)
电平(类似振幅?): 高低电平的电压差(我们这里的是
3.3v)
PWM 波在 TIM
定时器中的形成方式
首先TIM定时器会将输入频率根据PSC进行预分频为定时器主频,
之后以向上计数为例, CNT 从 0 增加到 ARR
我们引入一个新的量为比较值(Capture Compare Register,
CCR), 然后我们在代码中设定: 当 CNT < CCR
的时候输出一种电平, CNT > CCR 的时候输出另一种电平
如上图所示⬆️, 这样我们还可以确定这个 PWM 波的占空比了
呼吸灯
人眼在超过60Hz 的灯光变化会产生视觉暂留现象
依照上面的图片, 占空比是描述电平 1 的时间所占一周期总时间的比值
我们使用高频的 PWM ...
这个实验中我们要使用 UART 进行点灯
让单片机通过 UART 给电脑发送消息
在电脑上给单片机的 UART 串口发信号,
检测到是开灯信号的时候将小灯打开
Step 0 - 接线
我们用来进行烧录的 daplink 同样具有 TTL 通信的功能, 如果你不使用
daplink 而是用的 stlink 那么你需要一个 USB 转 TTL 模块
, 让你的电脑接受到串口信号
什么是 TTL ? - TTL 指的是 TTL
电平(晶体管-晶体管逻辑电平) - USB 转 TTL
模块它的主要作用是让电脑和单片机进行对话: 电脑的 USB
信号不能直接接到单片机的引脚上. 这个模块将 USB 信号转换成标准的 TTL
串口信号(通常包含 TXD 发送引脚和 RXD
接收引脚
如果你使用 daplink, 直接将 daplink 上的 Rx 与单片机的 Tx 相连, Tx 与
Rx 相连(单片机上的 Tx 和 Rx 在哪请看下文)
如果你使用 stlink, 将 USB 转 TTL 模块的Rx 与单片机的 Tx 相连, Tx 与
Rx 相连, GND 相连, 然后将它的另一端插到电脑上 ...
学习记录
Unread通用的协议分层思想
初来乍到, 我们需要有一个对于通信协议的大致框架
我们知道有很多通信协议, 比如I2C/SPI/CAN, 他们是具有分层框架的,
也就是说我们要有一个基本的分层思想, 这对于我们初学者来说是至关重要的
适用于所有通信协议的通用模型
应用数据层: 他就是我们真正要传输的数据本身
链路传输层: 规定了地址(ID), 冲突检测与避免(仲裁),
误码校验, 滤波器与掩码, 该层的帧格式
物理信号层: 规定了硬件电路的设计规则,
用户使用的接线方式, 线路上传输信号与电平格式的对应关系, 波特率与比特率,
数据同步与异步传输, 收发模式等内容
这里对每一个具体的作用看不太懂没有关系, 以后会慢慢学习到,
但是现必须要有一个分层的思想, 知道通讯协议是分层的,
但是这个层次如何运用的呢? 我们要有一个”分层 + 封装” 的思想
分层 + 封装
核心就两件事:每层只干一件事,以及数据往下走时被一层层包起来”(封装),往上走时再一层层拆开(解封装)
比方说你要发送数据, 那么你的数据就是在应用数据层, 层层封装,
经过链路传输加地址, 检验, 帧格式, 最后变成电信号从物理信 ...
