Tips
STM32的UART通信(Register)
基本工作原理(F4系列)F4的USART模块支持可编程字长、自定义波特率、单线半双工模式(RX,TX使用一条线,半双工收发)、唤醒MCU、可编程的停止位长度、可启用/禁用/设置模式的就校验位。其硬件模块如下
F4系列的USART模块还支持IRDA协议和LIN协议,这里不会详细介绍
USART硬件系统可以被拆分成如下几个重要部分:
控制初始化工作部分
使能USART:由CR1寄存器UE位(bit13)进行控制,使能后USART模块才会开始工作,不用时失能减少功耗;
设置数据字长:F4系列支持8bit和9bit两种长度,通过对CR1寄存器M位(bit12)配置进行控制;
设置波特率:波特率生成器负责生成控制发送速率的时钟,由USART_BRR寄存器控制。
设置停止位长度:由CR2寄存器中bit[12:13]控制,支持0.5 / 1 / 1.5 / 2四种停止位长度
设置奇偶校验:CR1寄存器PCE位(bit10)控制。
控制收发工作部分
DR(数据寄存器):用于寄存要发送的数据或者收到的数据。发送时,该寄存器内的值会被逐个读取至TDR,并通过移位寄存器逐个bit发送;接受时,RDR ...
嵌入式中常用串行通信
USART简介USART:Universal Synchronous Asynchronous Receiver Transmitter,通用同步异步收发器
UART:Universal Asynchronous Receiver Transmitte,通用异步收发器
USART算是UART的哥哥,比UART多一个同步通信特性。这两个都是串行通信协议。同步通信需要双方时钟频率一致,而异步通信无需时钟频率一致,通过设置固定的波特率+识别起始位和结束位来识别数据。其数字基带调制均使用NRZ(不归零)码。
UART和USART最大都只能和一个主机同时通信
波特率UART通信的波特率用于描述UART每秒传输的比特的速度(因为UART采用二进制信道Baud=bps),其单位为bps(bit per sec),常用的波特率有9600,115200等。以9600为例,每一个bit持续的Ts就是
T_s=\frac{1}{9600}\approx104.2us帧格式UART规定数据空闲时,总线为高电平。
UART的帧格式为
起始位:一个低电平信号,使用由高电平(空闲)朝低电平(起始位)跳变的边沿 ...
STM32的中断(Register)
NVIC不同于普通单片机的软中断(单一入口,软件识别flag)或硬中断(不同入口)会在多个中断同时发生时挂起后发生的,STM32支持对中断的优先级进行编程,在中断中触发中断。用于管理这一优先级的系统被称为NVIC。
NVIC:Nested vectoredinterrupt controller,嵌套向量中断控制器,属于内核 (M3/4/7)。NVIC支持256个中断(16个内核中断+240个外部中断),内核支持256个中断优先级。ST公司把256个优先级裁切为了16个优先级(所有系列都是如此)。对于F407xx系列芯片,有10个内核中断,82个外部中断。
STM32的中断优先级又分为几类:抢占式优先级、响应式优先级、自然优先级。在STM32中,优先级设置的数值越小,其优先级越高
抢占式优先级:当两个中断同时发生时,优先执行抢占式优先级高的中断,可形成中断嵌套(在执行某低优先级中断中被高优先级再次中断,先执行高的再回来继续执行低的)
响应式优先级:当两个同抢占式优先级的中断同时发生时,优先响应 响应式优先级 高的中断,另一个被挂起。响应式优先级无法打断执行过程中的中断。
自然优先级 ...
STM32——HAL库
GPIO控制GPIO口寄存器的封装和总线时钟123456789101112131415161718192021222324252627282930313233//GPIO_TypeDef 结构体如下:typedef struct{ __IO uint32_t MODER; /*!<模式寄存器, Address offset: 0x00 */ __IO uint32_t OTYPER; /*!<输出数据类型寄存器, Address offset: 0x04 */ __IO uint32_t OSPEEDR; /*!<输出速度寄存器, Address offset: 0x08 */ __IO uint32_t PUPDR; /*!<上拉下拉电阻选择寄存器, Address offset: 0x0C */ __IO uint32_t IDR; /*!<输入数据寄存器, Ad ...
git常用命令
git常用命令以下内容中<参数>都表示输入参数,输入时不需要加<>
本地仓库相关在某一文件夹内初始化git1git init
把工作区文件添加至暂存区12git add <文件名 或 通配符>git add -u #将已跟踪的文件提交至暂存区
把暂存区文件提交至本地仓库123git commit -m "<对本次提交的描述>" #从暂存区提交git commit -am "<对本次提交的描述>" #将已跟踪的文件提交至暂存区和仓库git commit --amend -m "<对上次提交的描述修改>" #修改上次提交的描述,不加-m可进入vim编辑
查看当前仓库的状态(分支、文件、文件状态)1git status
回退版本 <输入参数>有:
—soft (保留工作区和暂存区仅回退版本)
—hard (回退版本、工作区、暂存区)
—mixed (回退功版本和暂存区,保留工作区)
1git reset <输入参数>
查看差 ...
sx1280芯片手册
基本结构引脚定义SX1280是一个工作在2.4GHz(ISM频段)的半双工收发器。芯片引脚定义如下:
Pin Number
引脚名称
I/O类型
功能
0
GND
-
-
1
VR_PA
-
功放的稳压供电
2
VDD_IN
I
设备稳压供电,连接到Pin12
3
NRESET
I
复位信号,低电平有效,内部上拉为50kΩ
4
XTA
-
参考振荡器或温补晶振输入
5
GND
-
-
6
XTB
-
参考振荡器
7
BUSY
O
忙信号
8
DIO1
I/O
数字IO
9
DIO2
I/O
数字IO
10
DIO3
I/O
数字IO
11
VBAT_IO
I
数字IO供电(1.8V至3.7V)
12
DCC_FB
O
片内稳压输出
13
GND
-
-
14
DCC_SW
O
DCDC开关电源输出
15
VBAT
I
RFIC的供电(1.8V至3.7V)
16
MISO_TX
O
SPI slave output_UART TX
17
MOSI_RX
I
SPI slave input_UART RX
...
LoRa基础
LoRa的调制与扩频由通信原理的知识知,在一个载波中,基带信息可以被承载在幅度、相位、和频率上。以2FSK调制为例,它使用两个不同频率的载波来分别表示不同的”0” 和 “1”。但是Chirp调制本身就进行了”扫频”, 那么如何来通过频率进行载波呢?由扩频通信简介一节中Chirp扩频知,Chirp频率是有个范围的,始于$f_0$,上下被$f_H,f_L$限制。LoRa将基带信息承载在这个$f_0$上面,也就是说,LoRa调制后Symbol的频率-时间图如下(LoRa采用线性Chirp):
信号在时域上振幅-时间图如下(这张图里面是down-chirp, 和上面那张up-chirp的图不是对应的关系):
论文[1]中作者把它称为:频移啁啾调制 Frequency Shift Chirp Modulation (FSCM) 大部分文章都是这么叫的,也有另外一些地方直接把这个称为PSK调制
起始频率$f_0$的确定LoRa的扩频因子SF不光决定了频率的展扩倍数,还决定了信道进制M(例如,8FSK的M=8,一个symbol包含$log_28=3$个bit)。M和SF的关系是:
log_2M ...
扩频通信简介
本篇文章涉及通信原理知识,需要掌握一定通信原理基础,了解基带调制,频带调制,相干解调,码元(符号)传输速率,Power Spectrum Density 等
有三种基本的扩频方式:
跳频扩频(Frequency-hopping speread spectrum)
直接序列扩频(Direct-sequence spread spectrum)
啁啾扩频/线性调频扩频(Chirp Spread Spectrum)
跳频技术(FHSS)传统的无线通信系统,发射机和接收机工作在单次通信过程中,载频一般是保持不变;例如通信频率是900MHz, 那么通信将一直使用这个频率进行。
跳频(Frequency Hopping)系统则在单次通信中,载频在多个频率上跳变。如901MHz, 902MHz etc.
跳频系统的调制与解调跳频的调制发生在频带调制之前。如下图所示,原始数据D(t)经过信息调制器后变成基带信号;同时产生一个伪随机序列来控制载波信号按照一定的规律跳变。接收端需要使用产生本振信号(local oscillator)进行相干,产生一个中频信号,中频信号再进行检波/解调。
伪随机序列 ...
Part1-CH3-数字电路的化简
最小化策略基本概念包含名词:
Literal: 字符,也就是有几个输入变量
Implicant: 蕴含项,输入变量的不同组合,也就是卡诺图里面的圈,一个圈就是一种蕴含项。
Prime implicant: 质蕴含项就是不能与其它蕴含项合并的蕴含项, 也就是,这个卡诺图的圈无法被更大的圈包裹.
Cover: cover是不同implicant的组合,就是不同卡诺图的圈组合成的完整的表达式。
Cost: 电路中所有 门的数量 + 门的输入信号的数量
Essential prime implicant: 若函数的一个质蕴涵项包含有不被函数的其他任何质蕴涵项所包含的最小项,则此质蕴涵项被称为必要质蕴涵项。
举个例子:
$\overline x_2 x_3$就是一个essential prime implicant, 因为$m_{11}$没有被其他任何质蕴涵项包含。同理还有$x_3 \overline x_4$ 和$x_2 \overline x_3 x_4$.在最少的cost的布尔方程里面,必要质蕴涵项是必须被包含的。写出必要质蕴涵项之后,发现$m_7$还没有被包含到。$ ...