嵌入式
文章平均质量分 68
浮若于心
一生,求知求解.....
展开
-
IIC地址配置与通信
I2C设备的通信地址通常由硬件决定,并且通过设备上的引脚配置。在许多I2C设备上,有一些引脚(通常标记为A0, A1, A2等)用于设置设备的I2C地址。这些引脚可以通过连接到VCC(高电平)或GND(低电平)来设置不同的地址组合。原创 2024-06-28 20:28:12 · 279 阅读 · 0 评论 -
QSPI四线SPI:D0、D1、D2、D3
在SPI(串行外设接口)通信中,D0、D1、D2、D3通常指的是数据线,也叫做数据引脚或通道。这些引脚的使用可能会根据具体设备或配置的不同而有所变化。除了上述标准的引脚,有些SPI设备支持双向或四向SPI通信模式,分别称为双SPI(Dual SPI)和四SPI(Quad SPI),这些模式可以利用更多的数据线来提高数据传输速率。原创 2024-06-28 19:47:49 · 583 阅读 · 0 评论 -
ADC位数、增益调制与参考电压
nRF52840的SAADC支持内部参考电压和外部参考电压。内部参考电压通常为0.6V,外部参考电压可以通过外部引脚提供。默认情况下,内部参考电压是0.6V,并且通过增益配置进一步调整。增益设置用于放大或缩小输入信号,使其适配到ADC的输入范围。增益与参考电压共同决定了ADC输入信号的电压范围。例如,当使用内部参考电压0.6V时,不同的增益设置会改变ADC的实际输入范围。增益设置决定了参考电压如何扩展到输入信号范围。也就是设置参考电压就是大于你检测口的输入电压。原创 2024-06-27 20:39:00 · 283 阅读 · 0 评论 -
一分二的音频线进行双声道录音
音频线单头上的圈一般代表单声道 (Mono) 输出。这种单头通常是一个TRS插头,即 Tip-Ring-Sleeve 插头。这里,插头上的圈指的是它的两个环(Ring 和 Sleeve)部分。Tip(尖端): 代表信号的正极或左声道(在立体声系统中)。Ring(环): 代表信号的负极或右声道(在立体声系统中)。Sleeve(套): 代表地线。如果你看到一个单头插头上有一个圈,而不是两个(在TRS插头上),通常表示这是一个单声道(Mono)信号。这意味着这个插头传输的是一个声道的音频信号,而不是左右原创 2024-01-23 21:49:25 · 623 阅读 · 0 评论 -
C与C++的函数相互调用
C 和 C++ 的函数可以相互调用,但需要一些特殊的注意事项,因为它们有不同的编译和链接规则以及一些语法差异。链接规则:C 语言的链接器通常使用 C 标准的函数命名和调用约定,而 C++ 链接器使用 C++ 的函数命名和调用约定。这意味着 C++ 可以支持函数重载和运算符重载,而 C 不能。如果你要在 C++ 中调用 C 函数,需要使用 extern "C" 块将 C 函数声明包裹起来,以告诉 C++ 编译器使用 C 的链接规则。原创 2023-09-11 20:27:31 · 1592 阅读 · 0 评论 -
温控器控制二管制空调或四管制空调
温控器是一种用于控制温度的设备,常见于空调、冰箱、热水器等家用电器中。二管制和四管制是温控器常见的两种控制方式,它们的主要区别在于控制输出的方式不同。当然还是要看针对控制的空调进行的选择。原创 2023-07-27 21:01:09 · 706 阅读 · 2 评论 -
NRF通信中使用的线圈、高频卡、低频卡
NRF的基本定义:NRF通信技术可以包括多种无线通信协议,其中包括NFC(Near Field Communication)协议,这是一种近场通信技术,通过接触或非接触方式传递信息。NFC是一种基于无线射频的短距离通信技术,通常工作在13.56 MHz的高频频段。NFC设备之间可以进行近距离的数据传输和交换,通常的传输距离在几厘米范围内。NFC技术支持两种主要模式:读取模式和写入模式。在读取模式下,一个设备可以读取另一个设备(如NFC标签)中存储的信息。在写入模式下,一个设备可以向另一个设备(如N原创 2023-05-19 20:57:44 · 2252 阅读 · 0 评论 -
GPIO引脚的模式设置:开漏、推挽、拉高、拉低、中断输入、串行通信、模拟输入输出、容错输入、PWM输出。过零检测介绍。
开漏输出(软件):将GPIO口设置为开漏输出模式,可以实现开漏输出控制方式,输出电平只能被拉低,而不能被拉高。在使用开漏输出时,需要外部接上一个上拉电阻,将输出电平拉高到高电平。开漏输出常用于驱动I2C总线、LED灯等场景中。 推挽输出(软件):将GPIO口设置为推挽输出模式,可以实现推挽输出控制方式,输出电平可以被拉高或拉低。在使用推挽输出时,不需要外部电阻。推挽输出常用于驱动电机、继电器等场景中。原创 2023-05-10 20:40:55 · 4113 阅读 · 0 评论 -
433芯片的基本原理和对应优缺点理解
433芯片是一种无线射频收发器芯片,它的频率为433MHz。这种芯片通常用于无线遥控器、传感器、门铃、智能家居等产品中,可以实现简单的数据传输和控制。433芯片的工作原理是将数字信号转换为射频信号并通过无线信道发送,接收端将接收到的射频信号转换为数字信号并输出。它的优点是成本低、功耗低、传输距离较远(通常可达50米到100米),因此在一些需要简单无线传输的场景中得到了广泛的应用。需要注意的是,433芯片的频率是公共频率,也就是说它是被广泛使用的频率之一,可能会存在干扰问题。原创 2023-03-28 21:32:07 · 8455 阅读 · 0 评论 -
RTX实时操作系统
RTX实时操作系统(RTOS)简介学习笔记RTOS:Real time Operation SystemKeil RTX 是免版税的确定性实时操作系统,适用于 ARM 和 Cortex-M 设备。【RTX概述】RTOS 可以自由地调度系统资源,比如CPU和内存,并且提供一种任务间通信机制。RTX程序使用标准的C结构编写,运用RealView编译器进行编译。RTX.H 头文件定义了RTX函数以及宏,可以让轻松地声明任务并达到RTOS所有特性。RTX的基本功能就是开始和停止任务...原创 2020-10-12 15:53:40 · 2747 阅读 · 0 评论 -
GPIO模拟串口TX与RX,波特率115200
使用单片机的GPIO口去模拟串口的TX与RX进行数据的发送和接收处理,波特率可使用115200原创 2023-02-02 19:17:41 · 2699 阅读 · 0 评论 -
结构体字节对齐引起的悲伤----数据跨越丢失或出错
对大家的建议就是当对结构体进行连续地址数据赋值时不要轻易直接赋值。比如:1、直接从Flash中读取数据,直接用结构体去存。2、使用memcpy的函数直接整段数据丢进结构体。3、使用指针指向结构体后面进行取值调用。这几个问题都可能因为字节对齐的关系导致最后取得数据有问题。原创 2022-08-19 20:27:23 · 943 阅读 · 4 评论 -
指针的自加和结构体中共同体数据调用
指针的自加和结构体中共同体数据调用原创 2022-08-16 19:34:29 · 368 阅读 · 0 评论 -
指针的指针操作结构体数据、双重指针
双重指针(Double Pointer)是指一个指针变量,它存储的是另一个指针变量的地址。双重指针通常用于在函数中修改指针指向的内存地址,或者动态分配内存并将指针传递回调用函数。在C和C++等编程语言中,双重指针通常以两个星号(**)来表示。原创 2022-08-16 19:25:51 · 592 阅读 · 0 评论 -
数据结构位域分析
数据结构位域分析。原创 2022-08-16 19:11:28 · 249 阅读 · 0 评论 -
C语言中attribute的应用
attribute的经典应用原创 2022-08-03 21:36:15 · 1671 阅读 · 0 评论 -
浅述蓝牙Mesh的配网流程
1. 信标(Beaconing)阶段2.邀请 (Invitation)阶段3. 交换公钥 (Exchange Public Keys)阶段4. 身份认证 CAuthentication)阶段5. 分发配网数据 (Distribution Of Provisioning Data)阶段原创 2022-06-28 20:50:59 · 3420 阅读 · 1 评论 -
浅谈Ble-Mesh的LPN模式
一个温湿度传感器产品,需要超过设定阈值才会从上送数据,这样就没有长时间唤醒时间,就无法接收到网关下发的设置数据,这时候就需要LPN模式。LPN的节点正常还是超过阈值才会上报数据,然后会过一段时间唤醒去访问他对应的Friend节点,去询问是否有对应的设置数据。这样就保证低功耗的同时又可以保证功能的完整性。......原创 2022-06-14 20:41:35 · 980 阅读 · 1 评论 -
FreeRTOS的软件定时器配置与使用
定义软件定时器句柄 定义初始化,开始,停止和回调原创 2022-06-11 14:58:07 · 921 阅读 · 0 评论 -
蓝牙Mesh的基本架构/配网流程/节点定义
蓝牙mesh的基本架构:承载层(bearer layer):承载层定义了如何使用底层低功耗堆栈传输PDU。目前定义了两个承载层:广播承载层(Advertising Bearer)和GATT承载层。网络层(network layer):网络层定义了各种消息地址类型和网络消息格式。中继和代理行为通过网络层实施。底层传输层(lower transport layer):在需要之时,底层传输层能够处理PDU的分段和重组。原创 2022-05-21 15:33:06 · 6926 阅读 · 4 评论 -
设置PWM占空比中TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4分别对应引脚和ADC通道对应引脚
这个函数TIM_SetCompare1,这个函数有四个,分别是TIM_SetCompare1,TIM_SetCompare2,TIM_SetCompare3,TIM_SetCompare4。位于CH1那一行的GPIO口使用TIM_SetCompare1这个函数,位于CH2那一行的GPIO口使用TIM_SetCompare2这个函数。使用stm32f103的除了tim6和tim7没有PWM...原创 2020-06-04 11:39:46 · 26366 阅读 · 0 评论 -
在vmware里面看不到已经设置的共享文件夹
查看你是否设置了共享文件夹vmware-hgfsclient在上图的虚拟机点击安装vmware tools,之后会在vmware tools文件里面有一个压缩的文件,把它复制到自己创的文件夹并解压然后执行sudo ./vmware-install.pl之后一路y就行后面就看到自己设置的共享文件夹了...原创 2019-05-26 21:05:37 · 25934 阅读 · 2 评论 -
ESP32的WIFI的STA模式&调控ESP32蓝牙和WIFI发射功率
以下相关API接口的定义可进入l乐鑫官方查看:Wi-Fi 库 - ESP32 - — ESP-IDF 编程指南 v4.4 文档STA模式配置过程:/* WiFi station Example This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this so原创 2022-02-10 15:27:26 · 4186 阅读 · 4 评论 -
ST-BlueNrg-lp蓝牙芯片OTA升级过程
1. “无线”固件升级的概念“空中下载”(OTA) 固件升级是一种协议,它允许低功耗蓝牙从设备通过空中接收来自低功耗蓝牙主设备的固件映像并将其写入闪存。 为了将事情置于低功耗蓝牙技术的正确环境中,OTA 固件升级框架定义了一项暴露其自身特征的服务,该服务可以与运行在低功耗蓝牙堆栈上的任何给定应用程序使用的其他服务共存。蓝牙 LE 主控器是由 BlueNRG-LP 开发套件平台通过 USB 连接到 PC 组成的组合系统。 该 BlueNRG-LP 平台由 BlueNRG GUI 驱动。 由于这种选择,原创 2022-02-10 14:52:24 · 5923 阅读 · 8 评论 -
FDR土壤水分检测传感器设计方案
频域反射法(FDR)频域反射法(FDR)利用电磁脉冲原理,根据电磁波在土壤中传播频率来测试土壤的表观介电常数,来得到土壤容积含水量FDR 的探头主要由一对电极组成一个电容,其间的土壤充当电介质,电容与振荡器组成一个调谐电路。传感器电容量与两级间被测介质的介电常数成正比关系。当土壤中的水分增加时,其介电常数相应增大,测量电容值也随之上升,导致测量频率也会发生变化,由此测得土壤的含水量。其基本逻辑关系如图 1-1 所示:...原创 2021-12-17 15:11:26 · 7485 阅读 · 3 评论 -
TDR土壤水分检测传感器方案设计
TDR(时域反射)法是介电测量中的高速测量技术,以 Feidegg(1969)等人对许多液体介电特性的研究为基础而发展起来的。最初被用来定位通讯电缆的缺陷。TDR 是一个类似于雷达系统的系统,有较强的独立性。Topp(1975)和 Davis(1975)将其引入用于土壤水分测量的研究。根据电磁波在不同介电常数的介质中传播时其行进速度会有所改变的物理现象提出时域反射法(Time Domain Reflecometry),简称 TDR 测量方法。土壤水分对土壤介电特性的影响很大。在外电场作用下,...原创 2021-12-17 14:23:10 · 4349 阅读 · 0 评论 -
ESP32中直接调用lwip_close无法正确释放资源,导致后续文件描述符无法正确创建
由最开始进行Socket创建开始:后面按照这个接口中的调用情况,查看到了接口函数alloc_socket,该函数的主要功能为为给定的Socket连接分配一个新的套接字。在该函数里面有如下的一个逻辑:可以看到,判断socket资源是否有人在使用时,除了判断socket->conn是否为空,还会判断select_waiting是否等于0。其中select_waiting标识该socket正在被多少个线程在使用。即要...原创 2021-12-16 20:00:46 · 2969 阅读 · 0 评论 -
ESP32的开发环境SDK4.3.1版本和编译环境搭建
首先:到乐鑫的官网下载一个最完整的安装包,地址为:https://dl.espressif.com/dl/esp-idf/?idf=4.3在这分为两种:在线安装和离线安装:在线安装与离线安装的区别在线安装程序非常小,可以安装 ESP-IDF 的所有版本。在安装过程中,安装程序只下载必要的依赖文件,包括Git For Windows安装器。在线安装程序会将下载的文件存储在缓存目录%userprofile%/espressif中。离线安装程序不需要任何网络连接。安装程序...原创 2021-11-10 20:12:08 · 1754 阅读 · 0 评论 -
数据结构:链表,栈和队列,串,数组和广义表,树和二叉树
第一章:时间复杂度的关系:O(1) < O(log2n) < O(n) < O(n * log2n) < O(n^3) < O(2^n) < O(n!) 复杂度越大,执行越慢。 空间复杂度:定义一个数组作为中转量为O(n),定义一个普通变量t,为O(1)。 数据的逻辑结构:线性结构:(线性表,栈,队列,字符串,数组和广义表) ...原创 2019-10-21 17:10:23 · 587 阅读 · 2 评论 -
探索Keil常用调试方法,由浅入深,逐步经典,令人着迷
前面几点一般人知道的操作1,变量添加到Watch作用:可以在调试过程中随时看到变量值的变化操作方法:选中变量,右键成功添加:这个是16进制显示,转为10进制显示:把勾选去掉:2,变量添加到memory作用:可以在看到变量地址的情况下看到变量数据的变化。添加成功后:可以通过上面添加的Watch知道该变量的起始地址是没有问题的。后面的就是每字节的数据,最大为FF算出来还是跟Watch中看到数据一样。这个是按照低地址位放在地位,比...原创 2021-07-20 19:37:06 · 13054 阅读 · 24 评论 -
初探BLE Mesh蓝牙组网信息连接传递流程
1,消息缓存队列和TTL蓝牙Mesh采用了消息缓存队列和TTL的优化方案来避免消息的无限制转发。消息缓存 Message cache:设备都会缓存收到消息的关键信息,以确定是否已经转发过此消息,如果是就忽略此消息。Message cache至少需要能缓存两条消息Time to Live(TTL): 每个消息都会包含一个Time to Live(TTL)的值,来限制中继的次数,最大可以中继126次。消息每转发一次TTL的值就减1,TTL值为1就不再转发2,广播与扫描Mesh节点在网络..原创 2021-07-03 17:11:37 · 3151 阅读 · 4 评论 -
认知BLE中多个MAC地址类型:Public Device Address、Random Device Address、Non-resolvable Private Address
1. 前言BLE设备有多种类型的设备地址,如Public Device Address、Random Device Address、Static Device Address、Private Device Address等等。2. BLE设备的地址类型一个BLE设备,可以使用两种类型的地址(一个BLE设备可同时具备两种地址):Public Device Address和Random Device Address。而Random Device Address又分为Static Device原创 2021-07-03 11:19:33 · 4436 阅读 · 0 评论 -
FreeRTOS中的xQueueCreate,xQueueSend,xQueueReceive
xQueueCreate原型:portBASE_TYPE xQueueReceive( xQueueHandle xQueue, void *pvBuffer, portTickType xTicksToWait );原创 2021-06-11 10:40:51 · 20013 阅读 · 9 评论 -
生成随机数函数:rand和srand
头文件为:stdlib.hrand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是<stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。#include <stdio.h>#include <stdlib.h>int main(){ int a = rand(); printf.原创 2021-05-06 19:01:01 · 725 阅读 · 4 评论 -
BLE低功耗的设置参数
广播间隔:两个相邻广播事件之间的时间称为广播间隔。可以选择“20ms ~ 10.28s”不等的间隔,通常,一个广播中的设备会每一秒广播一次。必须是“0.625ms”的整数倍。由于设备间的时钟会不同程度的漂移,两个设备可能在很长一段时间同时广播而造成干扰。为防止这一情况的发生,除定向广播之外的其他广播类型,发送时间均会被扰动。实现该扰动的方式为,在上一次广播事件后加入“0 ~ 10ms”的随机延时。这意味着,即使两个设备广播间隔相同,并在相同信道及时间点上发送造成了冲突,但它们发送下一个广播事件时也会有原创 2021-04-27 20:27:47 · 1293 阅读 · 1 评论 -
BLE低功耗蓝牙基础配置
协议栈的基本框架需要一个支持BLE射频的芯片,然后还需要提供一个与此芯片配套的BLE协议栈,最后在协议栈上开发自己的应用。其中主要讲述协议栈的组成与功能:PHY层(Physical layer物理层)。PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。 LL层(Link Layer链路层)。LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。像Nordic的BLE协议栈能同.原创 2021-04-27 19:57:45 · 1036 阅读 · 0 评论 -
KEIL编译器设置RAM数据复位后不被初始化数据
第一种,编译器设置:这样设置RAM2,,,前提是你的RAM空间要有0x8200的大小,,,我只是举一个例子。在用at指定空间就可以了,比如:unsigned char APP_MAC[6] __attribute__((at(0x20008000)));这样只要不带电属于热启动就不会被初始化第二种:1. 修改分散加载文件sct,增加一个名为MYRAM的执行节,该执行节起始地址为0x1000A000,长度为0x2000字节(8KB),由UNINIT修饰:在sct文件中这..原创 2021-04-20 21:08:52 · 3169 阅读 · 0 评论 -
SRAM,SDRAM,DRAM,ROM,EPROM,EEPROM
SRAM:静态RAM,不用刷新,速度可以非常快,像CPU内部的cache,都是静态RAM,缺点是一个内存单元需要的晶体管数量多,因而价格昂贵,容量不大。什么是SRAMSRAM的英文全称是'StaticRAM',翻译成中文就是'静态随机存储器'。SRAM主要用于制造Cache。SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据不会丢失,而且,一般不是行列地址复用的。SRAM是StaticRandomAccessMemory的缩写,中文含义为静态随机访问存储器,它是一种类...原创 2020-06-08 18:11:53 · 3908 阅读 · 0 评论 -
volatile的讲解以及宏定义和立即数
volatile关键字,是用于表明变量代码无法被优化!比如:int a = 0;a = 1;a = 2;a = 3;经过编译器代码优化后:int a = 0;a = 3;省去重复工作,debug下不会作任何优化,但这样的代码效率一般只用在调试下,release模式下会对齐进行优化,在GCC的编译器下会直接对这段代码优化,GCC下没有debug和release模式!这样的情况对,应用层来说可以解决重复代码,有效提高编码以及运行效率!但是对于嵌入式开发就不一样了,每个电.原创 2020-06-08 17:56:05 · 592 阅读 · 0 评论 -
物联网面试必过要点
一个指向指针的的指针,它指向的指针是指向一个整型数int **a;一个有10个指针的数组,该指针是指向一个整型数的int *a[10];一个指向有10个整型数数组的指针int (*a)[10]一个指向函数的指针,该函数有一个整型参数并返回一个整型数int *a( int ){}一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数int (* a[10...原创 2019-11-30 17:10:41 · 4691 阅读 · 2 评论