自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 Android studio中导入opencv库

出现的错误:NullPointerException: Cannot invoke “java.io.File.toPath()” because “this.mySdkLocation” is null。2、如下图所示,将opencv中文件夹下的build.grade的配置与APP文件下的build.grade配置相同。解决办法:1、网上很多人都是导入sdk/java的文件夹,实际应该按照参考链接中导入sdk文件夹。

2023-12-19 20:36:15 861

原创 配置android sudio出现的错误

错误:Namespace not specified. Specify a namespace in the module’s build file.参考链接:https://zhuanlan.zhihu.com/p/660296763。原因:Android 大括号中少了namespaces。原因:cmake版本不一致的原因。

2023-12-12 22:15:35 3196

原创 MOSFET米勒平台效应

t2-t3:MOS管完全开通,漏极电压急速下降,所以Vgd电压变化巨快,也就是dv/dt很大,即Cgd两端电压变化很快,而要Cgd两端电压变化很快,需要提供很大电流,因此,原本给Cgs供电的驱动电流基本上被Cgd抽去,导致栅极电压不在升高,也就是造成了米勒平台效应。t1-t2:MOS管开始导通,漏极电流开始上升,此时MOS工作在可变电阻区域,直到漏极电流Id达到饱和,到达t2区域,此时MOS管完全导通,工作在恒流区,漏极电压开始下降。

2023-07-21 09:36:24 1062

原创 Buck电路振铃产生的原因以及解决的办法

*过程:**上管完全导通下管完全关闭之后,SW端的电压逐渐上升到输入电压(Vin),此时由于L1两端的电压差为0,电流本应该为0,但电感的电流不能突变,因此电感产生反电动势,变成上负下正,此时SW端的电压超过输入电压(Vin),此时的电压就是尖端电压,所以尖端电压的大小很大程度上是由上管的寄生电感决定的。高的尖端电压可能会超出MOS管的耐压值,导致被击穿而损坏;其中:L1为上管MOS管以及走线的寄生电感总和,L1为上管MOS管以及走线的寄生电感总和,C2为底边测MOS管的DS之间的寄生电容。

2023-07-14 11:37:22 2152 2

原创 This application failed to start because no Ot platform plugin could beinitialized问题

C:\ProgramData\Anaconda3\Lib\site-packages\PyQt5\Qt5\plugins\platforms复制到Anaconda3\Library\plugins\platforms文件夹中,进行替换(这里需要更新matplotlib软件包,)一定要是自己的项目环境的文件夹。

2023-03-30 19:37:26 520

原创 MoveNet流程解析

第三步:根据粗略的关键点信息,构造一个以这个关键点坐标为中心生成一个权重矩阵,直接以等差数列0-47(47的原因是当关键点信息在边界时能够覆盖整个特征图(48*28)),中心点最小为0,往外依次递增的权重系数矩阵。原因:如果Heatmap中这个关键点与粗略关键点最靠近,说明这个关键点就属于最靠近图像中心的人的关键点,求解出来的结果也是最大的。第二步:根据选出的人体中心点坐标,从Regression Head 通道中选取对应的关键点x、y值坐标,得到最靠近图像中心的人体的粗略的关键点信息。

2023-03-29 19:09:24 2199

原创 关于TTL、RS232、485物理层的一些总结

TTL电平:标准协议是5V为1,0V为0,早期的单片机都是以5v供电为主流,而为了降低功耗,选用5v的2/3也就是3.3v作为单片机供电,如STM32基本上都是3.3V供电,兼容5V的TTL电平引用:添加链接描述RS232:RS232标准采用的接口是9针或25针的D型插头,常用的一般是9针插头,采用全双工通讯规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS -232的噪声容限为2V,接收器将能识别高至+3V的

2022-04-17 15:02:36 460

原创 git中出现repository仓库不存在的:repository ‘http://47.108.92.196:8090/http://47.108.92.196:8090/‘ not found

origin远程仓库的地址错误,需要重新设定新的远程仓库地址:git remote set-url origin 你新的远程仓库地址然后重新上传就ok了$ git push -u origin master

2021-12-18 22:33:44 1235

原创 SIM868中的GPRS调试失败的几个原因

一、按照官方文档教程直接连接外网IP,试了无数次,都是连接失败。解决办法:使用内网穿透软件,如花生壳,非常好用,而且免费,具体教程看下面帖子:https://blog.csdn.net/Emb_2333/article/details/104039102其中需要注意的是:1、 AT+CIPSTART的命令的IP地址和端口是映射到外网的IP地址和端口,也就是下图中的第二个。上图是引用下面一篇帖子,并不是我自己的IP添加链接描述2、端口号不能是8080,不然网络调试助手,选择 “TCP Se

2021-08-11 20:32:07 416

转载 C语言状态机

链接:https://www.cnblogs.com/lihuidashen/p/11510532.html

2021-07-14 15:36:07 74

原创 Ubantu下第一个OPENCV的C++实列

需要的工具make、cmakemake、cmake区别与联系:参考链接https://www.jianshu.com/p/b3ddb0662c98OPENCV编译的顺序就是:原文件--CMakeLists.txt(自己手动编写) —cmake —makefile —make —生成可执行文件所以用Ubantu编写OPENCV需要多修改一个CMakeLists.txt文件需要的文件第一步C++代码: //该头文件中已经包含了OpenCV中各个模块的头文件 2 #include&lt

2021-07-09 15:54:58 67

原创 ARM汇编压栈出栈具体详解

参考:https://blog.csdn.net/u012874587/article/details/78843940?utm_source=app&app_version=4.8.0先看参考文章之后,再过来看可能比较懂,一些基本的东西,上篇文章讲了,这篇文章省略了。写这篇文章的目的就是,大部分博客只是将汇编代码贴出来了,而没有进行详细的注释,导致我自己看的时候有很多疑惑,所以写下这篇文章,对一些我有疑惑的地方添加注释1、首先得明白栈帧结构,如下图其中栈指针R11在汇编中一般为fp,sp

2021-06-23 11:06:01 2487 1

原创 对MCU存储地址的一些理解

1、MCU是多少位的,意味着有多少根地址总线,也就意味着有多大的存储空间。如STM32是32的MCU,意味着有32根地址总线,有4G 的存储空间地址就相当于数据的开关,只有打开开关(其实就是寻址)才能对存储在存储器中的数据进行操作2、为什么要进行一个读操作,之前一直没想通**答案:**不进行读取0x20000000中的数据,没有办法单独对1bit进行操作,只有读取了数据放入寄存器当中做一个位与的操作,然后将结果放入寄存器当中,最后将修改好的数据存入0x2000000所指的内存单元当中,所以产生了位带

2021-06-10 11:14:34 1703

原创 加快MCU运算方法之一

对于可预见性的大量计算(如使用一个公式进行大量计算),并且需要保证运算速度的,可以先将运算结果计算出来,放入ROM中,等到程序真正运行的时候,直接做映射,省略MCU的计算时间,从而加快运算速度...

2021-06-10 11:01:36 362

原创 调试串口的几点经验

**一、**如果使用两个串口,一般一个是串口打印信息(简称调试串口),一个应该是用作与传感器或者无线通讯模块之间的通信,最好使用模块化编程,也就是把调试串口单独写一个文件,方便以后移植,也不容易将两个混淆**二、**使用串口一定要加上引脚复用连接,不然根本调试不通,这个坑,进了一个星期才爬出来 /* 将USART1_GPIO复用功能连接 */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1); GPIO_PinAFConfig(GPIOA

2021-05-25 11:40:10 475

原创 ESP8266连接网络调试助手出现error

一般有两个问题:①. 没有关闭windows的网络安全②.IP地址错误,在Windows中的cmd窗口输入ipconfig,使用下面的局域网的IP地址

2021-05-15 11:27:09 1879

原创 对typedef的理解

对变量进行声明typedef int *Point;//Point可以声明一个int类型的指针int *pr; //原型行Point pr; //应用行typedef声明的类型在变量名的位置出现,而后可以用已经声明的名称(Point)去声明变量

2021-04-28 09:22:16 81

原创 ../Libraries/core_cm3.c(445): error: non-ASM statement in naked function is not supported

KEIL5版本更新了的缘故,使用了keil5默认的版本6的编译器,而固件库还是支持版本5的编译器解决办法,修改成5版本就ok了

2021-04-10 18:53:16 9188 31

原创 STM32之DMA结构体

2021-04-02 19:00:13 358

原创 STM32之新建工程

一、建一个工程文件夹,包含以下文件夹:①②将标准库中的下面两个文件夹cpoy到Libraries文件夹中③将下面的两个文件copy倒Device文件夹中二、keil中新建一个工程①FWLB中将所有下面文件下的c文件添加进去三、配置魔术①将 Use MicroLIB勾选上②勾选③添加宏USE_STDPERIPH_DRIVER,STM32F302x8并将 C99 Mode勾选上④添加头文件路径...

2021-04-01 17:19:03 96

原创 新建工程常见问题

一、error: declaration may not appear after executable statement in block**解决办法:**声明不能出现在可执行状态之后,C语言关于变量的定义只能放在函数的开头,放在执行语句的前面定义,这是C89的标准。后来的C99标准就已经改变了,无论定义在之前还是之后都是可以的...

2021-04-01 14:14:04 272

原创 Const 和 volatile

Const:常量,在程序运行时不可改变大小,也就是不能成为左值。但是可以通过指针来修改其内存存储的值const 在 * 号的左边时,数据本身为常量const在 * 右边时指针为常量口诀左数右指const用于修饰函数,一般用于修饰函数返回值不能改变。也就是const int *func(); //在 * 号的左侧volatile编译器警告指示字,警告编译器每次都去内存中取变量的值主要修饰可能被多个线程访问的变量,比如会被硬件中断中改变的值...

2021-03-29 16:11:48 53

原创 RS485和RS232的区别

这两者属于电气和机械特性,不属于协议的一种。RS232只允许一对一,适合短距离传输,可以实现全双工通讯RS485可以实现一对多通讯,采用差分传输,两根线传输,只能实现单工传输。可以实现长距离传输,抗干扰性比较强...

2021-03-24 09:25:12 305

原创 while中的自增(++)问题

i++ :while中先执行判断语句后自增,最后执行while中的语句int x = 0; while(x++ < 5) { printf("%d\n",x); }结果如下++iwhile中先执行自增后再执行判断语句,最后执行while中的语句int x = 0; while(++x < 5) { printf("%d\n",x); } return 0;结果如下:...

2021-03-21 17:34:53 3363 3

原创 c语言的存储类别

c中的每一个变量和函数都有两个属性:类型(type)和存储类型(storage class).存储类型:auto,extern,register,staticauto:自动存储类型,为局部变量,只能用于块(也就是{})的作用域的变量声明中。一般自动省略,使用auto的目的是明确要使用与外部变量同名的局部变量的意图。extern:指示编译器去别处查询其定义,属于引用式声明,并不是定义变量,编译器不会为其分配存储空间。register:寄存器存储类别,也属于局部变量,访问速度和处理速度更快,但不能使用地

2021-03-19 17:14:49 601

原创 字符串指针溢出问题

一般是少了一个字符串结束符 ‘/0’ , 动态内存分配也要相应+1char* reverseLeftWords(char* s, int n){ int temp = strlen(s); char *string = (char *)malloc(sizeof(char)*(temp+1)); for(int i=0; i< strlen(s)-n; i++) { *(string + i) = *(s+n+i); }

2021-03-18 16:13:10 298

原创 2021-03-17HTTP与MQTT之前的区别

HTTP与MQTT之前的区别HTTP是基于TCP/IP协议之上的,以文档为中心,适用于性能较好的设备。采用三次握手四次挥手来建立通讯MQTT是一种轻量级的协议,采用低带宽,功耗低,报文相当短,可在网络条件比较苛刻的场地使用,使用发布(Publish)和订阅(Subblish)模型。适用于IOT场景...

2021-03-17 10:21:05 98

原创 2020-9-26STM32学习笔记

事件与中断的区别事件:产生事件的目的是产生一个脉冲,用于供其他外设使用,属于硬件级别**中断:**产生中断的目的是把输入信号输入到NVIC中断控制器当中,进一步进入中断函数,实现其功能,属于硬件级别。...

2020-09-26 19:18:48 65

转载 2020-09-26

影子寄存器影子寄存器与预装载寄存器(pre-reload register)直通,真正发生更新起作用的是影子寄存器。设置影子寄存器的目的是:软件不能同时更新多个寄存器,如果没有影子寄存器与预装载寄存器(pre-reload register),则会发生多个通道时序不同步现象,造成信息缺失、信息错误等问题。软件首先将数据保存到预装载寄存器当中,当发生事件跟新时,影子寄存器可以同时被与预装载寄存器同时跟新到相应预装载寄存器的内容。这样就起到了,同步更新的功能。...

2020-09-26 09:48:49 67

原创 2020-09-26

**栈详细介绍**栈的作用计算机里面的栈其实有着举足轻重的作用。大学刚学c语言的时候,教的是堆栈,传达的是一种后入先出的算法思想。但其实我们知道,堆和栈是两个截然不同的东西。而这里面说到的栈,则是更融入到计算机系统里面,CPU结构的一部分。一个函数设计里面,有2个问题:1.是参数传递的问题。传递参数的目的,是为了代码可以重用,让一种方法可以应用到更多的场合,而不需要为N种情况写N套类似的代码。那用什么方法来做参数的传递,可以选择:a.为了速度快,使用cpu的寄存器传递参数。这会碰到一个问题,cp

2020-09-26 09:32:27 50

原创 驱动电阻触摸屏的难点解析

滤波的方法:滤波的实质就是对采集的数据进行数据处理,以便得到的ADC的数据更加准确。因此我们一般采集9个或者10个数据进行数据数据后存放到内存中。而对数据的处理其实直接可以用我们中学学过的平均值,中位值,差值等方法进行处理,其中相对而言最简单,编程相对而言较容易实现的就是平均值(去掉最大值最小值,再进行求平均值),这种方法不需要设置阈值,而中位值方法需要加入阈值,不然得到的线条很粗糙。触摸...

2020-04-20 15:22:18 216

原创 触摸屏滤波的方法

STM32中触摸屏的 滤波的方法主要有两种思路,一种就是采用中值平均,二是采用差值平均中值平均的思路:先将数据进行排序,排序的方法有冒泡排序和选择排序,排序后选择中间的几个数进行算术平均,编程较简单,相信只要会了排序,就能敲出代码。差值平均的思路差值平均其实就是用编程的方法写出数学公式,代码很容易看懂,具体阔以看下面博客https://blog.csdn.net/weixin_3436...

2020-04-17 21:05:45 1152

原创 冒泡排序算法思路

精髓N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟(N-1),内层控制每一趟的循环次数(N-i)。具体思路见转载:https://www.cnblogs.com/bigdata-stone/p/10464243.html...

2020-04-16 20:48:30 197

原创 STM32学习之路——1、新建工程模板

一、新建工程目录:二、将STM32中的固件库的内容复制到新建工程目录当中:                    CMSIS文件夹              startup文件夹         user文件夹         三、点击软件,新建一个project,建立组文件夹                四、手动添加库文件FBILIB组文件直接将下图的文件全部添加进去...

2020-03-04 21:26:23 163

原创 温度传感器DS1820

1、初始化时序: 首先,DSPORT保持低电平480到960微秒之间,然后将其拉高以产生复位脉冲,若产生复位脉冲,则表示初始化成功。 复位脉冲:产生60~240微秒的低电平后释放总线。 防止while语句产生死循环,设置当5毫秒后仍然没有产生低电平(复位脉冲)。则跳出while循环,初始化失败。2、写时序: ...

2020-02-17 21:13:44 2656

原创 EEPROM

代码写入顺序****(1)启始信号与终止信号:SCL高电平期间,SDA下降沿表示启始信号,SDA上升沿表示终止信号(2)应答信号: start() stop()应答信号为 SDA特殊的低电平信号 非应答信号为SDA高电平信号(3)数据写入 and 读数据:write_byte() read_byte()在传输数据时,必须将SCL置为高电平,数据必须保持稳定,只有当SCL为低电...

2020-02-09 22:26:18 412

原创 LCD1602代码解析

代码写作步骤:(1)理解时序图,根据时序图编写命令写入行(write_cmd)模块以及数据写入行程序(write_dat)(2)初始化LCD:1、 功能设定:write_com(0x38)设定数据总线位数、显示的行数及字型。DL:0=数据总线为 4 位 ,1=数据总线为 8 位N:0=显示 1 行, 1=显示 2 行F:0=5×7 点阵/每字符 1=5×10 点阵/每字符2、显...

2020-02-05 21:21:04 9618 1

空空如也

空空如也

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

TA关注的人

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