蓝牙1. 蓝牙概述蓝牙,是一种利用低功率无线电,支持设备短距离通信的无线电技术,能在包括移动电话、PDAQ、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换,蓝牙工作在全球通用的2.4 GHz(2.4 至 2.485 GH)ISM(即工业、科学、医学)频段,使用IEEE802.11协议。
2. 蓝牙发展历程自1994年由爱立信推出至今,蓝牙技术已经走过了30个岁月,发展为当前的状况。
第一代蓝牙:关于短距离通讯早期的探索,使用的是BR(Basic Rate)技术,此时蓝牙的理论传输速率,只能达到721.2Kbps。
第二代蓝牙:新增的EDR(Enhanced Data Rate)技术,使得蓝牙设备的传输率可达3Mbps。
第三代蓝牙:核心是AMP(Generic Alternate MAC/PHY),这是一种全新的交替射频技术,支持动态地选择正确射频,传输速率高达24Mbps。
第四代蓝牙:主推Low Energy低功耗,BLE(Bluetooth Low Energy)低功耗功能。
第五代蓝牙:开启物联网时代大门,在低功耗模式下具备更快更远的传输能力。
3. ...
串口通信1. 通讯基础1.1 并行通信与串行通信按数据传送的方式,通讯可分为串行通讯与并行通讯。
串行是按位传输,一次传输一位。
并行一般是多位同时传输。比如8位16位32位等。
并行通讯
串行通讯
通讯距离
低
远
抗干扰能力
弱
强
传输速率
高
低
成本
高
低
1.2 全双工、半双工及单工通信
单工通信:数据只能沿一个方向传输
半双工通信:数据可以沿两个方向传输,但需要分时进行
全双工通信:数据可以同时进行双向传输
1.3 同步通信与异步通信
同步
有时钟,发送和接收双方按照预定的时钟节拍进行数据的发送和接收,双方的操作严格同步。
异步
无时钟,双方不需要严格的时钟同步,每个数据块之间通过特定的起始位和停止位进行分隔,接收方可以
独立地识别每个数据块。
1.4 通信速率通信速率是指在通信系统中单位时间内传输的信息量,是评估通信系统性能的重要指标之一。
比特率(Bit rate):
定义:比特率是指在通信线路(或系统)中单位时间(每秒)内传输的信息量,即每秒能传输的二进制位数。它用单位时间内传输的二进制代码的有效位(bit)数 ...
看门狗1. 什么看门狗看门狗是一种计时硬件电路。
当系统环境比较恶劣复杂的时候,程序可能会出现一些不可预料的错误,导致程序卡死,崩溃等情况。看门狗就可以及时的重置程序,使程序重新从头开始运行。
STM32 有2个看门狗,独立看门狗,窗口看门狗。独立看门狗号称宠物狗,窗口看门狗号称警犬。
独立看门狗(IWDG)由其自己的专用低速时钟(LSI)驱动,因此即使主时钟失败,它仍然保持活动。
窗口看门狗(WWDG)的时钟是从APB1时钟预分频的,并且具有可配置的时间窗口,可以编程以检测异常晚或早的应用程序行为。
IWDG最适合需要看门狗作为完全独立于主应用程序之外的过程运行的应用程序,但对定时精度的要求较低。
WWDG最适合需要看门狗在准确的定时窗口内做出反应的应用程序。
2. 独立看门狗IWDG(Independent watchdog,独立看门狗)。独立看门狗是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号,这个刷新计数器值的动作就是我们经常说的 ...
定时器1. 系统定时器1.1 SysTick介绍系统定时器(SysTick系统)是属于CM3内核,内嵌在NVIC中。
系统定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1 / SYSCLK,一般我们设置系统时钟SYSCLK(与AHB相同)等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。
SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间SysTick的处理方式都是相同的。
系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。
1.2 SysTick工作原理在使用Systick定时器进行延时操作时,可以设定初值并使能后,每经过一个系统时钟周期,计数值就减1。当计数到0时,Systick计数器自动重装初值并继续计数,同时内部的COUNTFLAG标志会置位,触发中断(如果中断使能)。这样可以 ...
中断系统1.中断概述 在主程序运行过程中,出现了特定事件,使得CPU暂停当前正在运行的程序,转而去处理这个事件,等这个事件处理完成之后,CPU再回到刚才被打断的位置继续处理,这就是中断。
这个打断CPU执行的特定事件,一般称之为中断源。被中断源打断的位置,称为断点。处理特定事件的过程,称为执行中断处理程序。
当然中断也是可以嵌套的,即中断嵌套。CPU会根据优先级的不同,来决定执行顺序
中断源可以是外部的,也可以是内部的。外部的叫外部中断源,内部的叫内部中断源(内部的中断有时候也叫异常)
Cortex-M3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
一般情况下,芯片厂商会对Cortex-M3的中断进行裁剪。具体中断信息可通过对应的芯片手册查看。
2. 中断向量表STM32的中断向量表是一个储存中断处理函数地址的数组,位于Flash区的起始位置。每个数组元素对应一个中断源,其地址指向相应的中断服务程序。当中断发生时,处理器会根据中断号查找向量表,然后跳转到对应的中断服务程序执行。
中断向量表的主要作用是解决中断函数 ...
1. 时钟1.1 时钟树在STM32中有3种不同的时钟源用来驱动系统时钟(SYSCLK):
HSI振荡器时钟(High Speed Internal oscillator,高速内部时钟)
HSE振荡器时钟(High Speed External(Oscillator / Clock),高速外部时钟)
PLL时钟(Phase Locked Loop 锁相环/倍频器)
还有2种2级时钟:
LSI时钟(Low Speed Internal,低速内部时钟)
LSE时钟(Low Speed External oscillator,低速外部时钟)。
1.2 HSE时钟高速外部时钟信号(HSE)可以由两种可能的时钟源生成:
HSE外部晶体/陶瓷谐振器
HSE用户外部时钟
谐振器和负载电容必须尽可能靠近振荡器引脚放置,以最小化输出失真和启动稳定时间。负载电容值必须根据所选振荡器进行调整。
目前几乎所有的STM32单片机的设计都是在外部接一个8MHz的晶振,经过PLL倍频(9倍频)后得到一个72MHz的系统时钟。系统默认就是这个时钟。通过启动文 ...
GPIO外设1. 什么是GPIO General-purpose and alternate-function I/Os (GPIOs and AFIOs),GPIO是微控制器(如STM32)与外界交互的核心接口,通过配置引脚模式实现灵活控制,即用程序来控制或读取GPIO引脚的输入或输出。AFIO是STM32微控制器中用于管理GPIO引脚复用功能的关键模块,其核心作用是将物理引脚动态配置为外设功能(如USART,SPI,PWM等),而非仅作为普通输入/输出。即复用IO引脚来控制外设。
可由STM32直接驱动GPIO引脚从而实现与外部设备通信,控制以及采集和捕获的功能。
1.1 GPIO详情 STM32有多组GPIO,不同的STM32芯片有不同组的GPIO端口。以STM32F103ZET6为例,其共有7组GPIO端口,分别是GPIOx(x从A-G),每组控制16个引脚,共有112个GPIO引脚。可通过查询对应的STM32芯片的数据手册,来获取对应的信息。
每个引脚的电平是0-3.3V,部分引脚最高可以兼容到5V。
1.2 GPIO的主要特点 (1)不同 ...
位操作位操作(Bit manipulation)是计算机编程中对位(bit)进行操作的技术,通常用于低级编程和优化。位操作可以对整数的二进制表示进行直接的修改,这在某些情况下比使用高级语言构造更高效。以下是一些基本的位操作:
按位与(AND):操作符 &。两个位都为1时结果才为1。
例如:1011 & 1100 = 1000
按位或(OR):操作符 |。两个位中至少有一个为1时结果为1。
例如:1011 | 1100 = 1111
按位异或(XOR):操作符 ^。两个位不同的时候结果为1。
例如:1011 ^ 1100 = 0111
按位非(NOT):操作符 ~。反转所有位,1变成0,0变成1。
例如:~1011 = 0100
左移(Left Shift):操作符 <<。将位向左移动指定的位数,右边空出的位补0。
例如:1011 << 1 = 10110
右移(Right Shift):操作符 >>。将位向右移动指定的位数,左边空出的位补符号位(算术右移)或0(逻 ...
什么是MakefileMakefile 是一个特殊的文件,通常用于管理和自动化软件的构建过程。它包含了一系列的指令,这些指令定义了如何编译和链接程序。Makefile 与 make 工具一起使用,make 是一个构建自动化工具,它会查找 Makefile 文件,并根据其中的指令来构建程序。
Makefile 的基本结构通常包括以下几个部分:
目标(Targets):这是构建过程中的一个步骤,比如编译一个源文件或安装程序,即最终要生成的目标文件
依赖(Dependencies):目标需要的文件,如果这些文件发生变化,目标将被重新构建,即目标文件由哪些文件生成
命令(Commands):生成目标的命令序列,即通过执行该命令,使依赖文件生成目标文件
基本规则12Targets:Dependencies(tab)Commands
tab不能用空格代替
Makefile文件的命名:makefile或者Makefile
下面是一个简单的makefile文件
12main: main.c func1.c func2.c gcc -o main main.c func1.c func2 ...
网络字节序什么是大端和小端?
大端(高端字节序,网络字节序):低位地址存放高位数据,高位地址存放低位数据
小端(低端字节序):低位地址存放低位数据,高位地址存放高位数据
什么时候使用大端和小端?
大端和小端只是对数据类型长度是两个及以上的,如int,short,对于单字节没限制,在网络中经常需要考虑大端和小端的是IP 和端口
大小端转换函数网络传输用的是大端法
如果机器用的是小端法,则需要进行大小端的转换
下面4个函数就是进行大小端转换的函数
123456#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);
函数名的h表示主机 host,n表示网络network,s表示short,l表示long
上述的几个函数,如果本来不需要转换,函数内部就不会做转换
IP 地址转换函数点分十进制IP转网络IPint i ...