自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZR

  • 博客(62)
  • 资源 (6)
  • 收藏
  • 关注

原创 SPI通信详解

一、前言  SPI是一种高速全双工同步通信总线。一个主机设备可以和一个或多个从机设备进行通信。主设备开始与从设备的同步通信,从而完成数据的交换。标准的SPI有四个引脚,分别为:MOSI: 主机输出从机输入MISO: 主机输入从机输出CLK: 时钟CS片选(这个引脚叫法比较多)二、名词CPOL:clock polarity 时钟的极性:表示 SPI 在空闲时, 时钟信号是高电平还是低电平.CPHA:clock phase 时钟的相位:表示 SPI 设备是在 SCK 管脚上的时钟信号变为上

2021-08-20 20:55:48 8589

原创 IIC通信详解

对于这种常用通信协议中的细节,时间长不使用总是记不清,今写下笔记。一、时序及信号1、起始信号:当时钟总线SCL为高电平时,数据线SDA由高电平向低电平跳变。2、结束信号:当SCL线为高电平时,SDA线从低电平向高电平跳变。注:开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态,其它器件不能再产生开始信号。主器件在结束信号以后退出主器件角色,经过一段时间过,总线被认为是空闲的。3、数据采样IIC总线数据传送采用时钟脉冲逐位串行传送方式,在SCL的低电平期间,SDA线上

2021-08-20 12:22:07 1899

转载 STM32的启动文件详解

启动文件简介启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作:1、初始化堆栈指针SP=_initial_sp2、初始化PC 指针=Reset_Handler3、初始化中断向量表4、配置系统时钟5、调用C 库函数_main 初始化用户堆栈,从而最终调用main 函数去到C 的世界查找ARM 汇编指令在讲解启动代码的时候,会涉及到ARM 的汇编指令和Cortex 内核的指令,剩下的ARM的汇编指令我们可以在MDK->Help->Uvision Help 中搜索到

2021-08-05 09:37:47 1106

原创 VSCode常用

1、文件夹过滤“**/__obj_app_soft”:true,2、文件过滤“**/*.pp”: true,3、常用插件1)、 C/C++,这个肯定是必须的。2)、 C/C++ Snippets,即 C/C++重用代码块。3)、 C/C++ Advanced Lint,即 C/C++静态检测 。4)、 Code Runner,即代码运行。5)、 Include AutoComplete,即自动头文件包含。6)、 Rainbow Brackets,彩虹花括号,有助于阅读代码。7)

2021-07-23 16:24:57 396

原创 GIT克隆版本库中的单个文件夹

有的时候一个工程很大,但是我们只是需要这个工程中的某个文件夹中的内容,如果克隆整个版本库是需要很长时间的,下面就说明一下怎么克隆指定的文件夹现在有一个test仓库https://github.com/mygithub/test你要gitclone里面的tt子目录:在本地的硬盘位置打开Git Bashgit init test && cd test //新建仓库并进入文件夹git config core.sparsecheckout true //设置允许克隆子目录e

2021-07-05 14:02:53 732

原创 NFS、FTP、SSL、TFTP环境搭建

一、FTP服务1、安装FTP服务sudo apt-get install vsftpd2、配置sudo vi /etc/vsftpd.conf3、重启FTP服务sudo /etc/init.d/vsftpd restart二、SSH服务开启apt-get install openssh-server三、tftp服务器搭建一般情况下,tftp用于通过网络下载东西到DRAM中,,Ubuntu主机作为TFTP服务器,因此需要在Ubuntu上搭建TFTP服务器。1、安装 tftp-h

2021-05-17 19:49:53 141 1

原创 GIT项目A引用项目B中某个文件夹的详细操作流程

一、项目A分割-subtree1、进入需要被分割文件夹的上级目录2、使用subtree分割git subtree split -P <name-of-folder> -b <name-of-new-branch><name-of-folder>:从工程根目录开始算起,类似“project/folder1/folder2”的格式<name-of-new-branch>:创建的分支名称二、创建项目B1、退出当前目录,在其他位置创建个git仓库m

2021-05-12 15:26:39 2385

原创 bat:令人绝望的文件夹切换

接触bat文件不多,现在写一个简单的bat脚本,发现win下的跨盘符切换文件夹时的两个奇怪现象,让我在测试的时候浪费了很多时间。因此好好的整理一下。奇怪现象1:使用cd f:/dir/dir 但是切换不成功奇怪现象2:使用cd c: 切换盘符的时候怎么不是根目录而是切换到了上次从c盘切换出来时候的目录。奇怪现象1:C:\Users\Administrator>cd F:/00C:\Users\Administrator>奇怪现象2:C:\Users\Administrator

2021-04-29 17:05:44 522

原创 bat语法

一、文件目录:当前盘符:%~d0当前路径:%cd%当前bat文件路径:%~dp0当前bat文件短路径:%~sdp0当前执行命令行:%0

2021-04-26 15:09:23 761

原创 Linux之GDB调试

一、代码编译需要使用gdb调试的代码编译时需要添加-g选项如:# gcc -g test.c -o test二、调试流程使用gdb运行编译出来的可执行文件如:#gdb test三、GDB调试语法命令功能(gdb) I查看文件(gdb) r运行代码(gdb) c恢复程序运行(gdb) b 6在第六行设置断点(gdb) info b查看断点信息(gdb) p n查看变量n的值(gdb) n单步执行–不进入函数内部(gdb)

2021-04-22 20:03:04 62

原创 Linux串口通信

#include "stdio.h"#include "stdlib.h"#include "unistd.h"#include "sys/types.h"#include "sys/stat.h"#include "fcntl.h"#include "termios.h"#include "errno.h"#include "string.h"int main(){ int tty_fd; struct termios opt; int n; char

2021-04-21 11:30:18 119

原创 Linux线程同步(线程信号量互斥量)

有两组接口函数用于表示信号量,一组取自POSIX的实时扩展,用于线程。另一组取自系统V信号量,常用于进程同步。本文章是针对第一种信号量的知识点。信号量是一种特俗的变量,可以增加减少,但对其的访问被保证是原子操作,这样的特殊性保证了一个程序中有两个或者更多的线程试图改变一个信号量的值时,系统将保证所有的操作都将依次执行,如果是普通变量,来自同一个程序中的不同线程的冲突操作所导致的结果是不确定的。以下所有函数返回值都遵循成功返回0。一、信号量创建#include "semaphone.h"yi/*

2021-04-20 10:54:26 201

原创 Linux线程及线程属性

一、线程创建#include "pthread.h"/** *thread:句柄(线程ID) * attr:设置线程数性,如果没有特俗需求,设置未NULL * start_routine:入口函数 * arg:入口函数的参数 * return:线程创建成功返回0,失败返回错误码**/int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routi

2021-04-19 15:44:42 219

转载 关于DMA,TCM(ITCM和DTCM)和Cache的理解!

关于DMA,TCM(ITCM和DTCM)和CacheDMADMA=Direct Memory Access。这是一种通过硬件实现的数据传输机制。简单的说,就是不在CPU的参与下完成数据的传输。DMA是一种硬件设备。这种设备的工作原理是这样的:——首先CPU告诉DMA设备,要有一堆数据需要传输,为了效率而请它出马。(DMA请求)——DMA收到CPU的消息,开始准备。此时CPU把数据源地址、数据目标地址、传输数据量、传输模式等等参数告诉它。(DMA初始化)——DMA初始化完,向CPU发送消息“借你的

2021-04-14 16:20:49 603

原创 Linux进程

一、进程和线程得关系

2021-04-12 19:49:26 107

原创 GIT创建分支及分支合并的操作流程

一 创建分支流程:创建分支:git branch develop_branch切换到该分支: git checkout develop_branch在远端建立一个分支与该本地branch分支相对应起来:git push --set-upstream origin develop_branch二 分支合并:切换到需要合并到的分支: git checkout master将目标分支合并到目前所在分支:git merge develop_branch使用git status查看冲突文件,并解决

2021-04-12 18:44:41 993

原创 GIT常用指令集合

一、名词:工作区(workspace) :平时些的代码都在工作区暂存区(index/Stage) :工作区代码执行add命令后将代码提交到暂存区本地仓库(Repository) :暂存区代码执行commit命令将代码提交到本地版本库远程仓库(Remote) :本地仓库代码执行push命令将代码提交到远程仓库二、本地git服务器搭建三、常用命令命令功能常用指令git add将文件从工作区添加到暂存区【git add file1 file2】将文件file1,f

2021-04-01 17:52:28 122

原创 嵌入式格式化输出(LOG、自己实现printf、可变参数、LOG颜色)

今天在项目上遇到一个问题,需要将目前代码中的全部LOG增加文件等定位标识,方便在定位代码。在网上折腾了一下,整理一下“printf”中用到的一些接口及一个相对使用较方便的LOG输出格式。...

2021-03-23 17:23:23 2064

原创 python修饰符 ‘@‘ 详解

今天在琢磨一个python脚本中遇到了一个陌生得python写法,觉得很奇怪,如下图:这个一堆’@'是什么东西?一、定义:函数修饰符在python中,这个@被称为函数修饰符,其基本功能及特点如下:可以在模块或者类的定义层内对函数进行修饰出现在函数定义的前一行,不允许和函数定义在同一行一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西二、作用简单理解,修饰符就是一个函数,并且是一个入参为函数的函数。举个没有意义的例子,比如我们需要将一个函数(这里应该

2021-03-12 16:19:03 3946

原创 NMEA0183格式GPS数据详解

NMEA0183格式以’$'开始,主要语句有GPGGA,GPRMC,GPGSA,GPGSV,GPVTG,GPZDA等NMEA格式数据如下:$GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77$GPRMC,121252.000,A,3958.3032,N,11629.6046,E,15.15,359.95,070306,,,A*54$GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04

2021-02-23 16:55:47 1420

原创 GBK/GBK2312字库寻址及使用原理

一、字符编码1.1.ASCII编码   我们知道,我们所见到的所有字符编码,对于计算机来说都是0、1。更具不同位上的0、1,一个字节(8位)共有256中排列方式,因此一个字节就可以表示256个不同的字符。在这个前提下,ASCII编码就由美国制造出来用来表示英文、数字以及一些不可见字符。  ASCII编码共规定了128个字符,比如数字0的ASCII编码为48,符号@的ASCII编码为64,字符a的ASCII编码为97···,因为每一个字节8位共可以表示256个字符,因此对于ASCII字符是使用不完的,仅

2020-12-21 18:14:12 5083

原创 linux文件系统结构

linux文件系统结构目录存放内容/bin存放二进制可执行文件,这些命令在单用户模式下也能够使用,可以被root和一般账号使用/bootUbuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序/dev设备驱动文件etc存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址home系统默认的用户主文件夹,一般创建用户账户的时候,默认的用户主文件夹都会放在此目录下lib存放库文件media次目录下放置可插拔设备

2020-12-10 21:09:14 71

原创 linux开发板直连电脑

1、设置windows网络,设置IP地址、子网掩码、默认网关、DNS服务器处于同一个网段的意思:几个设备的子网掩码和默认网关是一样,只有IP地址不一样IP:192.168.1.22子网掩码:255.255.255.0默认网关:192.168.1.1DNS服务器:192.168.1.12、设置ubuntu:IP:192.168.1.23子网掩码:255.255.255.0默认网关:192.168.1.1DNS服务器:192.168.1.13、双向ping,确认是否通4、开发板设置

2020-12-10 20:41:06 449

原创 python UI:PyQT5安装及使用

  初学python,目前需要设置一款带UI的上位机软件,查了很多资料,UI的设计可选择的也是多得很,但是最终选择了PyQT5,不要问为什么,因为控件都是可拖拽的,设计完成之后可以直接生成代码。方便~。UI设计界面如图:网上相关安装资料很多,但是我在实际安装的时候按着网上的操作失败,找了半天才安装成功,在这里也算是给自己写一个安装笔记,供读者及自己排坑。一、安装pip install PyQt5pip install pyqt5-tools二、在pycharm中配置扩展程序1、添加ext

2020-10-26 18:14:24 922

原创 python学习:面向对象:类、对象、继承

一、类 ① 约定成俗的类的命名方式:  1)首字母大写  2)为了与其他进行区分尽量避免使用 ‘_’,建议采用StudentHomework小驼峰的格式 ②类的常见格式:

2020-10-15 19:06:29 137

原创 Python学习:项目的组织结构:包、模块、类、函数

一、几个重要的概念包:可以简单的理解为文件夹的概念;二者的区别在于包下存在__init__.py文件。也就是说:文件夹 + __init__.py = 包模块:简单的理解为文件类:class函数、变量:属于类的特性二、命名空间导入模块:import①import 包.文件:eg:import folder.file,表示的是导入folder文件夹中的file文件;使用该方法导入时,在后面变量的使用时也需要使用"folder.file.var"这样的格式。...

2020-10-13 19:38:52 821

原创 Python学习:运算符和循环分支

一、运算符1、值类型和引用类型  ①值类型:int、str、tuple  ②引用类型:list、set、dict2、字符串赋值运算  b=‘hello’  b=b+‘python’  以上两个表达式实际运算之后得到的是一个新字符串,可以使用id获取字符串地址查看3、==和is的区别   ==是比较两个值是否相等   is是比较身份(地址:id() )是否相等?4、值、身份、类型 为对象的三个特征   值:==   身份:is   类型:isinstance二、循环分支

2020-10-13 19:38:39 96

原创 Python 学习:列表,元组,集合,字典

一、列表:list1、简介你可以创建包含字母表中所有字母、 数字0~9或所有家庭成员姓名的列表; 也可以将任何东西加入列表中, 其中的元素之间可以没有任何关系。在Python中, 用方括号([] ) 来表示列表, 并用逗号来分隔其中的元素。eg:2、列表的访问列表是有序集合, 因此要访问列表的任何元素, 只需将该元素的位置或索引告诉Python即可3、修改、 添加和删除元素3.1 修改3.2 增加1、在末尾增加:方法append() 将元素’ducati’ 添加到了列表末尾常见使

2020-09-14 17:25:39 515

原创 Python 学习:基本数据类型数字和字符串

一、数字1、数据类型:整形:int浮点型:float2、获取数据类型:typeeg:type(1)3、进制二进制:0b开头八进制:0o开头十六进制:0x开头4、进制转换转为二进制:bin() ;eg:bin(0x11)转为八进制:oct();eg:oct(0b11)转为十进制:int();eg:int(0x10)转为十六进制:hex();eg:hex(10)5、布尔类型True:非0或非空False:6、复数复数的表现形式:36j二、字符串1、字

2020-09-08 10:56:01 374

原创 通信基础RB、RE以及NBIOT的传输速率

帧说的是数据链路层面的事情,时隙是时分系统中物理信道层面的事情RB:频率上连续的12个子载波,时域上的一个slot(时隙),称为一个RB。RE:频率上一个子载波和时域上symbol称为一个REslot和symbol什么关系?Normal CP(Cyclic Prefix)情况下,每个子载波一个slot有7个symbol;Extend CP情况下,每个子载波一个slot有6个symbol比如NBIOT网络中,一个无线帧(10ms)共有10个子帧,一个子帧(1ms)有两个时隙(slot),每个时隙有7

2020-09-07 16:44:34 9881 2

原创 非常详细的MQTT+TLS(四)----阿里SDK的使用

非常详细的MQTT+TLS----阿里SDK的使用一、demo的下载1、登录阿里云的控制台,找到文档与工具2、定制自己的SDK,按着我的选择方式,我创建MQTT+SSL的线程一共使用了4K的堆栈(剩下100多Byte)PS:没有计算接受发送等Buf在内哈。二、demo的使用前面分别说明了MQTT和TLS的移植。当然,我们还可以选择给直接的办法,直接使用阿里云提供的SDK,阿里云上面提供的SDK模块化做的非常好,我们只需要修改一些与平台相关的文件就可以完美运行。如果你的系统是linux或者fre

2020-08-27 19:09:30 3680

原创 非常详细的MQTT+TLS(三)----TLS篇

非常详细的MQTT+TLS----TLS篇多的不说少的不唠,这篇文章没有理论只有经验!1、移植有了前面MQTT的移植,相信大家也都了解了这种软件包的套路我下载的是【mbedtls-mbedtls-2.23.0】,文件夹目录如上图所示,其中大部分文件都是示例及说明等。TLS移植时最麻烦的应该就是config文件的配置,内容很多,在这里给出一个对接成功的config文件供参考。【超链接】与MQTT类似SSL也需要我们配置net_sockets.c,该文件内部用于创建TCP以及读写的底层函数,如果你使

2020-08-27 18:56:10 6564 5

原创 非常详细的MQTT+TLS(二)----TLS铺垫篇

非常详细的MQTT+TLS----TLS铺垫篇在移植TLS之前先熟悉一下TLS、TCP/IP、MQTT三者的关系,这很重要!!“TCP/IP、MQTT、SSL之间是什么关系呢?”通过MQTT章节的说明已经明确了TCP/IP和MQTT之间的关系,那SSL在MQTTs处于什么位置嘞。那就要从TLS的定义说起TLS称为安全传输层协议,用于在两个应用程序之间提供保密性和数据完整性。说白了TLS就在TCP之上建立了一个通道,将我们TCP传输的明文进行加密,从而保证通信的私密性。如图为MQTT与MQTTs的区

2020-08-27 18:53:38 5534

原创 非常详细的MQTT+TLS(一)----MQTT篇

非常详细的MQTT+TLS----MQTT篇首先要说明的是,MQTT是一个构建在TCP/IP之上的轻量消息协议,也就是说我们要创建MQTT协议之前需要创建TCP连接。在TCP连接之上再创建MQTT通信。1、MQTT移植:如图是我们从github下载到的MQTT包。第一次接触的人一定和我一样一脸懵逼,现在我很负责任的告诉你,你只需要关注如下两个文件夹。在移植时我们需要将【MQTTPacket】→【src】下面的文件移植到我们的自己平台上,这些文件可以理解成是对接MQTT的公共文件包,不管你是什么平台

2020-08-27 18:32:06 13379

原创 man手册汉化

汉化前汉化后:正题一、下载汉化包1、linux直接获取:sudo mkdir /usr/local/zhmancd /usr/local/zhmanwget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.2.tar.bz2/cab232c7bb49b214c2f7ee44f7f35900/manpages-zh-1.5.2.tar.bz22、手动下载移植到linuxhttps://down

2020-07-27 16:32:27 675

原创 TCP连包问题解决:Nagle算法

在使用LWIP创建TCP时,发送比较快时发现出现连包现象,同样的发送速度UDP却没有出现。这是为什么呢?最终定位的Nagle算法:TCP/IP协议中,Nagle算法是默认开启的。那么什么是Nagle算法呢?Nagle算法通过减少需要传输的数据包,来优化网络。在内核实现中,数据包的发送和接受会先做缓存。启动TCP_NODELAY,就意味着禁用了Nagle算法。当我们不设置TCP_NODELAY时,就默认打开了Nagle算法。这个时候,我们发送的数据将会在写缓存中保存,直到保存到一定量之后,数据才会被发送。

2020-07-17 19:36:49 1363

原创 NTC温度计算(附程序)

首先第一部分需要先弄明白它的名字中的各个部分都是什么意思,觉得不需要的可以直接跳过。一、NTC命名在淘宝上随便搜了一个NTC电阻,命名如下:1、MF代表含义:**电阻命名含义MF51单端玻璃封装NTC热敏电阻器MF52小黑头测温型NTC热敏电阻MF58玻壳测温型NTC热敏电阻器MF72功率型NTC热敏电阻器MF73大功率NTC热敏电阻器2、10K、5K ··· 代表含义:这里的10K代表的是在25℃下的标准阻值。同理5K代表在25℃下的

2020-07-17 19:36:35 27829 19

原创 STM32利用UID和OTP进行固件加密

资料准备:对应模块的参考手册(RM)一、OTP介绍OTP:one-time programmable,只允许一次编程,也就是只能从1写0,不能从0写1。这里可能有人要问,这不是flash的特性么?需要注意的是,flash是允许擦除的,是允许从0写1的。二OTP不允许擦除。而且,如果只有一位是0,整个双字(64位)都不能再写了,甚至也不能写0x0000 0000 0000 0000。这里的双字节根据不同的单片机有差距,由于我所使用的每次只能写双字节,因此,这里便是双字节。“The OTP area ca

2020-06-23 11:10:00 6778 4

原创 DL645通信协议97/07规约(附上下行例子)

DL/T645规约是针对电表通信而制定的通信协议,目前分两个版本,一个为1997年制定的成为97规约,还有就是07年指定的07规约。目前二者并存于市场中,要弄清楚二者的差异一、数据帧格式这里需要注意的点有:1、地址域长度不足时有用00H补齐的,也有用AA补齐的,这里可以自己测试一下。2、数据域中的数据接受和发送的时候都是需要处理的,主站加0x33,从站减0x33。3、所有的数据项(地址域、数据域)都需要按着低字节在前,高字节在后的远程传输。4、一般需要在每一帧数据前加上前导字节:FE FE F

2020-06-16 18:32:10 13026 2

原创 PADS两个常用使用技巧

虽然不是画板子得硬件工程师,但是很多时候也需要从PCB和原理图上面查看引脚。本篇文章描述在使用PADS时两个比较常用的操作:1、将PCB和原理图连接,同步显示2、学会如何屏蔽多余的线,可以清晰的看到引脚或者走线等一、连接PCB和原理图如图点击工具栏PADS图标,弹出的串口可关闭,下方显示已连接,下面点击原理图或PCB试一下,OK,二者可以同步了。二、屏蔽多余部分(Ctrl+Alt+C)将鼠标点击在PCB图上,使用Ctrl+Alt+C,在弹出的对话框中选择需要屏蔽的部分,将 √ 去掉,点击应用-

2020-06-16 13:05:15 938

ping工具ping工具ping工具ping工具ping工具ping工具ping工具

ping工具ping工具ping工具ping工具ping工具ping工具ping工具ping工具ping工具ping工具

2022-11-03

position.rar

定位数据解析代码

2021-03-04

MQTT+SSL资料整理.rar

整理了项目中使用到的 MQTT包、TLS包、阿里云平台根据三元组生成用户名密码的插件、MQTT调试工具以及一篇SSL描述以及证书的生产

2020-08-31

一个经过验证的config.h

一个经过验证的TLS的config配置文件,详细的查看:https://blog.csdn.net/qq_43448742/article/details/108266716 该链接,详细描述了TSL的移植过程

2020-08-27

edaHelper.rar

一款插件,支持protel99se,DXP(AD),PADS,OrCAD的capture、Cam350、Saber、PC Schematic、Allegro、CircuitCAM,并且对每个软件的功能都可设置。如:PADS可以实现AD的功能,包括鼠标拉动界面等等

2020-07-24

VSPD虚拟串口.rar

该软件可以实现电脑虚拟一个通路出来也就是两个端口。可以用于测试需要在电脑上手动发送数据到另一个串口软件时使用。

2020-07-17

DLT645-2007.zip

包含DT645-2007国网多功能电能表通信协议,和测试软件:其中包含了读正向有功总等包含DT645-2007国网多功能电能表通信协议,和测试软件:其中包含了读正向有功总等包含DT645-2007国网多功能电能表通信协议,和测试软件:其中包含了读正向有功总等

2020-06-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除