自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 keil-mdk使用遇到的坑

当前代码大小为:8592+708+248+3136=12684B=12K,显然还没有达到限制值32K,因此可以正常烧录和下载。1、编译过程弹出错误但是需要自己把编译过程拷贝出来放在word中分析错误在哪,不能像Andsight编译器一样可以直接提示错误。然后竟然一切OK,可见4.74版本的MDK支持了nuvoton,4.12版本的是不支持的。在新塘官网或者github中找到了相关的文件,如下如图,安装完之后,再提示安装驱动。错误R206:没有注册使用权,需要管理员权限。①卸载KEIL-MDK。

2024-03-14 15:09:56 891

原创 KEIL-MDK4的环境设置

所以,站在工程文件所在路径下,看CMSIS\Include在哪,Device\Nuvoton\NUC123\Include在哪,以及StdDriver\inc在哪,可以用绝对路径,也可以采用相对路径,绝对路径就不需要跟上面那样辛辛苦苦的的找确定多少个..\了,但是坏处就是一旦工程目录发生了变化,这里的路径就都得全部调整。细心的朋友其实就会发现上面的两个红框的文件图标都有一个箭头的,而下面的这个红框的文件图标是空白的,其实这是一个标志,有箭头的代表路径正确,没有箭头的代表路径有问题,怎么设置?

2024-03-14 14:48:45 986

原创 存储器分类

2020-02-22 17:12:58 424

原创 彻底弄明白LDO

LDO英文全名就是Low Dropout Regulaor,顾名思义就是低压差线性稳压器,属于线性电源,因为晶体管工作在线性区(即放大区)。其内部结构如下:【工作原理】 LDO内部基本都是由4大部件构成,分别是分压取样电路、基准电压、误差放大电路和晶体管调整电路。分压取样电路---通过电阻R1和R2对输出电压进行采集,误差放大电路---将采集的电压输入到比较器反向输入端...

2020-01-06 16:49:43 16023 7

原创 一个永久记住三极管实物cbe极位置的巧妙方法

教大家一个永久记住三极管B极、C极、E极位置的方法。【实物图】【电气符号】【大家误认为是这样的】【实际上是这样的】于是就是真正的实物管脚位置了:【永远记住】三极管实物管脚位置就是电气符号管脚位置按照逆时针对调一次的结果。【知识延伸】对于MOS管,也是这样的思路:...

2019-12-31 10:35:12 9670 2

原创 世界著名半导体公司及其官网

世界著名半导体公司 以下是我所了解的一些著名半导体公司的概况,公司排名依据是iSuppli分析报告的各公司2008年收入,25家公司中 美国10家,1英特尔、4德州仪器、8高通(qualcomm、12超威半导体(AMD)、13飞思卡尔 (freescale)、14 Broadcom、16美光(Micron)、21英伟达(NVIDIA)、22迈威尔科技(Marvell )、25美...

2019-07-12 15:27:55 9569

原创 设计软件定时器

在MCU芯片内部,往往硬件定时器的数量是非常有限的,而实际工程中却需要大量的定时器来辅助完成具体的功能,如果一个函数占用一个定时器,那么显然不够用,怎么办?思路有2种:1、直接将开源嵌入式操作系统的软件定时器搬来使用2、自己设计软件定时器这里我只介绍第二种方法,我们知道,硬件定时器是通过对系统时钟周期进行计数实现的,那么软件定时器也不例外,首先得要有时基,然后得计数以及清零或者重新...

2019-06-22 08:47:04 1059

原创 SysTick_Config深究

函数原型如下:/** \brief System Tick Configuration The function initializes the System Timer and its interrupt, and starts the System Tick Timer. Counter is in free running mode to generate peri...

2019-06-06 15:00:23 2350

原创 彻底搞明白USART_FLAG_TC 与 USART_FLAG_TXE之间的 区别

最近看到有不少人问USART_FLAG_TC 与 USART_FLAG_TXE的区别是什么,我今天就抽时间详谈此事。先说串口收发过程:对于CPU来说,只需要将数据填入发送数据寄存器中就可以启动串口发送了,因为数据寄存器中的数据会由硬件自动打入发送移位寄存器中;同理,接收移位寄存器中一旦接收到一字节的数据后,移位寄存器中的数据会被硬件自动打入接收数据寄存器中,CPU就可以从接收数据寄存器中取...

2019-06-04 16:12:00 34483 10

原创 排除法和替代法在工程开发中的妙用

今天分享一个刚刚解决好的硬件产品问题,这个问题的解决过程中用到的思维方法其实是很值得学习的。工厂拿回来了好几片刚刚贴好的板子,每一片板子上电后(电池供电)都有固定频率的中频噪声。该板子的背景情况介绍:该产品之前早已大量出货,并且已经出货的板子声音很干净,没有任何的噪声,这次只是更换了相关的音频接口、还有一些元器件更换了供应商。问题排查过程:先附上系统参考图1、从源头开始...

2019-06-03 10:19:28 331

原创 从MDK4到MDK5之“盘古开天辟地”

在中国古代神话里,盘古开天辟地之前,天地是混沌的融为一体的,盘古开天辟地之后,才有了天和地。而现代物理学公认的事实就是宇宙在大爆炸之前是一个无限小的奇点,大爆炸后形成各种星系,并且各星系一直在加速远离对方,这也就是宇宙膨胀。从这个角度来讲,盘古开天辟地与现代宇宙大爆炸理论还是有几分吻合的。 扯远了,今天我们不谈宇宙,只谈keil-MDK。为什么谈keil-MDK之...

2019-05-09 10:03:55 2789

原创 电磁波与无线技术

在工程开发中,听到很多人探讨红外线可以穿透哪些材料、315M(或者433M)信号传输需要多长的天线、蓝牙传输用什么天线、2.4G信号可以传多远等等,很多说法都是瞎编。我觉得作为受过高等教育的工程师,应该从理论上分析一下这些基本问题,做一个有主见,有知识,有素养的工程师。毕竟关于光和电磁波的本质早在19世纪就已经被科学家揭开了。我们不需要重新研究电磁波,只需要利用现成的知识。 ...

2019-05-06 14:40:23 1774

原创 单片机程序加密思路

实际产品中MCU软件涉及到机密信息,因此需要保护已上市的产品中MCU固件不被窃取,梳理了一下,具体思路有以下几种:1、将MCU的FLASH锁死以防止固件被非法读取。2、软件中增加自毁机制3、在软件中增加加密算法第一道防范是针对那种毫无研发能力的厂商,这种厂商一般直接把MCU拿给专业破解机构进行破解获取MCU的固件,然后批量烧录到他们自己的MCU中完成赤裸裸的盗版。如果把读取FLAS...

2019-05-05 15:38:19 5873

原创 多维数组的组织结构和内存分布规律

1 数组是什么?多个相同数据类型变量构成的集合就是数组,比如int a[2]; int b[6]。2 为什么C语言要设计数组这个概念?因为很多场合下需要把一堆相同类型的数据存放在内存中,而数组正好可以满足这个要求。3 为什么C语言要设计多维数组,比如二维数组,三维数组?理论上,数据都可以存放在一维数组中,但是这样存放毫无层次,毫无规律,数据的访问也会非常的复杂。于是设计有层...

2019-04-29 16:00:37 1811

原创 深度剖析strcpy与memcpy

1 strcpy1.1 strcpy的功能用于将字符串从一个地方拷贝到另外一个地方。1.2 strcpy函数C语言源码:char * strcpy(char* dst,const char *src){ if((src==NULL)||(dst==NULL)) return NULL; char ...

2019-04-26 15:47:58 3211 2

原创 指针数组和数组指针之“终极区分办法”

【概念】指针数组:顾名思义,就是指数组的元素都是指针的数组。指针是定语,数组是中心词,指针修饰数组---指针的数组,也就是指 针构成的数组。数组指针:顾名思义,就是指向数组的指针。数组是定语,指针是中心词,数组修饰指针----数组的指针。【定义方式】先看看基本类型变量定义方法,int a;说明:这是定义一个int型变量,int修饰的...

2019-04-24 14:05:46 176

原创 大端模式和小端模式之“终极记忆”

背景:十进制数,最高有效位MSB在左边,最低有效位LSB在右边,即左边为大。二进制数其实也是一样的,例如1001_0110表示的十进制数就是96.那么数据是怎么存放在存储器中的呢?无非就两种存放模式:低地址存放MSB,高地址存放LSB;低地址存放LSB,高地址存放MSB。命名:但是这两种方式该怎么命名呢?得取个合理的计算机行业的名字才能提高理解效率,这个名称早就已经取好了,就是“低地址...

2019-04-23 11:34:48 1747 1

原创 波峰焊和回流焊的汇总

波峰焊和回流焊的区别是什么?如果用一句话回答,那么就是这样的:波峰焊就是用来焊接插件元器件的,回流焊就是用来焊接贴片元器件的。简述一点回答,就是这样的:波峰焊,熔融的焊锡形成波峰对元件焊接;回流焊,高温热风形成回流对元件焊接。回流焊是在炉前已经有焊料,在炉子里只是把锡膏融化而形成焊点,波峰焊是在炉前没有焊料,在炉子里通过焊料焊接。如果稍微详细一点的回答,是这样的:波峰焊基本可以里解为,...

2019-04-23 10:31:37 6126

原创 typedef关键字

typedef是C语言的一个关键字,我们实际使用的时候可以理解成是一个绑定器,把若干标识符绑定在一起形成一个新类型,它是给编译器看的,编译器看到这个就直接将其当做一个新的类型看待了。当然了,如果有些人写的编译器并不是这么看待的,那就只能说明他对于C语言标准还没有彻底整明白。1. typedef unsigned char u8; //u8就代表unsigned char类...

2019-04-18 14:14:56 2711

原创 几个容易犯错的C语言问题

1、请分析下面这段代码有什么问题int main(){ char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0;}分析:变量a仅仅只是一个char型变量,而char *str = &a;就是让指针str指向变量a,但是strcp...

2019-04-17 17:31:09 2287

原创 按键开关机电路

1 目标:今天我们利用MOS管来设计一个按键开关机电路2 要求:长按按键2秒钟松开后,系统电源启动,再长按2秒钟后,系统电源切断。3 分析:该电路设计的开始阶段应该是一个逻辑问题,后期器件选型以及参数确定才是一个硬件问题,下面只分析逻辑问题3.1 先分析长按按键启动系统电源原理:要想按键松开后系统依然处于供电状态就需要MCU参与了,按键只是为了让MCU供电正常跑起来,接着就是MCU控...

2019-04-17 12:02:46 10563 3

原创 浅析嵌入式系统软件的可靠性测试难点

本文原文链接如下:https://www.jianshu.com/p/f6f5c3cd3fab目前,嵌入式软件的可靠性评价主要依赖测试,因为嵌入式软件的开发环境和软件在嵌入式系统中的运行环境是不同的,因此嵌入式软件测试的最大特点在于一个嵌入式软件的测试可以分为基于宿主机和基于目标机的不同环境进行测试,这往往也是嵌入式软件测试与一般软件测试最大的不同之处。一、基于宿主机和基于目标机的环境测试...

2019-04-17 00:02:08 1429

原创 堆和栈的区别

1、存储内容不同栈:在函数调用时,栈中存放的是函数中(最底下是函数调用后的下一条指令)的各个参数(局部变量)。堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员分配。2、管理方式上不同栈:由系统自动分配并释放空间。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间,当对应的生存周期结束后栈空间被自动释放。堆:需要程序员指定大小手动申请和手...

2019-04-16 22:59:06 188

原创 volatile关键字

首先,volatile是C语言的关键字,用于修饰变量,为什么汇编语言没有volatile,因为汇编语言根本不存在变量的概念,只有地址和标号的说法。所以,volatile其实是给编译器下发的一个命令。 其次,volatile英文含义是“易变的,不稳定的”,用它来修饰变量,就是要告诉编译器对该变量的读操作必须每次都从内存中获取,为什么呢?因为该变量可以被某些编译器未知的因...

2019-04-16 22:53:57 123

原创 模拟电路分析-----模拟开关、逻辑门和MOS构成的电路

今天我突然想到一个电路,设计如下。请大家分析一下其功能和可能的应用场合,感兴趣的可以留言,我尽量抽空进行互动。图中input A和input B分别为来自外部的信号,output A和output B分别为本系统输出信号。...

2019-04-16 10:23:15 1939

原创 区分PMOS管和NMOS管的巧妙记忆方法

MOS管的管脚有三个:源极S(source)、栅极G(Gate)和漏极(Drain),但是实际工程应用中,经常无法区分PMOS管和NMOS管、各管脚的位置以及它们各自导通的条件。对此,我想了一个方法,可以让大家很快的甚至是很难忘的记住这些东西。 源极:它就是来源,是源头,因此电流应该是从源头到别的地方,到哪呢?是漏极,肯定不是栅极,因为栅极是控制极,是发号施令的一个极...

2019-04-15 16:06:34 53586 21

原创 C语言和汇编语言对比

C语言中,程序员所定义的每一个变量,不管是基本类型(char,unsigned char,int unsigned int,short,unsigned short,long,unsigned long,double)的变量还是构造类型(数组,struct,enum,union,链表等)的变量,在编译之后都安排在了内存中的特定存储区域里面了,每一个变量都对应特定的内存空间。...

2019-04-08 14:37:44 7088

原创 I2C通讯常见问题汇总

本文对I2C通信常出现的问题进行一个比较完整的汇总,希望能对大家工程开发过程中有所帮助。1、简单介绍一下I2C到底是什么,毕竟有新朋友可能还不明白它的概念。I2C是由飞利浦公司于1982年发明的一种比较简单的通信协议,为什么要发明这个玩意呢?其实并不是无缘无故发明的,而是因为飞利浦自己开发了一款芯片,而当时世界上由没有现成的可靠的简单的通信协议,所以为了让自己开发的芯片简单易用,就发明了这...

2019-04-07 00:50:59 14938 11

原创 函数调用的本质

今天简单剖析一下函数调用的整个过程,让大家明白这个过程中CPU到底做了什么事。CPU正在高度紧张的执行着一个特定的任务,突然间收到通知要暂停当前的事,于是下面的事情开始了:1、保护现场,保护现场的目的就是为了保证中断服务程序执行完毕后CPU可以正常的返回到上次被打断的地方继续执行。现场保护做了什么事呢?①保存当前函数下一条要执行的指令的地址,通过PUSH的方式将其入栈;②保...

2019-04-03 10:45:15 681 1

原创 硬件设备与软件交互加密方案

有些硬件设备总是与client配合使用,硬件设备只是提供硬件躯体,而client充当灵魂,实现最核心功能。因此client加密是非常必要的,不允许没有注册的或者非法的设备接入。为此我设计了一套加解密思路,下图展示了硬件device与client交互过程中注册与验证的思路: 系统由device、encrypt、sever和client四部分构成,其中device...

2019-04-02 17:26:48 1242

原创 STM32的启动过程以及启动文件详解

有一个现象值得一说,对于大多数人来说,他们开发单片机程序的主要工作就是搞单片机应用开发,也就是大多数都是main函数之后的事,于是很多人以为单片机上电复位后直接就是从main函数开始执行程序的。如果他只是一个学生,我多多少少还能理解,毕竟他年幼无知尚未步入单片机大门,但是如果他是一个所谓的久经沙场的老工程师,这是会被笑话的。 也许有人说,我不清楚单片机怎么启动的...

2019-03-29 17:45:54 1860

原创 反gama校验

LED屏显示图像的时候,常常出现显示的图像与实物灰度相差太大,比如要么就是太白要么就是太黑。也就是如下图的第1副图和第四幅图:这个现象是由于LED灯本身输入的电压与它的发光亮度成非线性关系。也就是如下关系: 反映出来的曲线关系如下图,当gam...

2019-03-26 12:32:13 351

原创 C语言回调函数通俗理解

【回调函数概念】函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。【回调函数简单的说法】回调函数是由别人的函数执行时调用你实现的函数。【知乎作者常溪玲的解说】你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,...

2019-03-22 16:39:03 439

原创 C语言函数的参数

一、函数的参数可以是变量、变量指针和变量引用:void funcA(int8_t x){ x=x+1;}代码说明:该函数的参数属于值传递,在调用该函数时,仅仅只是把实参的值拷贝了一份赋值给了形参x,之后的任何操作都不会影响到实参的值。int8_t funcB(int8_t* x){ (*x)+=1; return (*x);}代码说明:该函数的...

2019-03-21 23:07:27 10715 3

原创 各种USB接口座介绍(非常详细、完整、清晰)

关于USB接口座,网上找了很久,很少有比较全面的介绍,要么就是少了这个座子,要么就少了那个座子,要么就是根本没有分类,看起来非常混乱,总之,很难看到认真梳理的资料。为了给大家一个完整的答案,我从各个平台各网站中暴力搜索,最终获得了非常有价值的完整的图片,并做初略介绍奉献给大家。 USB协议经历了USB1.0、USB1.1、USB2.0、USB3.0、USB3....

2019-03-21 17:02:02 8263 1

原创 USB2.0和USB3.0彻底梳理

最近公司有一款产品要用到USB技术,因此我又一次对USB基础知识进行了梳理,只是这一次把这些梳理全部公之于众,希望对大家有帮助,下表是我边查资料边更新,耗费了半天的时间汇总出来的。 USB1.0 (USB2.0低速版本) USB1.1 (USB2.0全速版本) USB2.0 (U...

2019-03-21 15:20:59 6165

原创 嵌入式C语言基础知识梳理

该图是关于C语言基础知识的树状结构图,也许里面有些地方看起来不够主流,但是可能更合理。以后将会对该图的所有细节知识点以通俗易懂的方式逐个梳理,敬请关注!...

2019-03-17 22:05:28 2841 1

原创 通过STM32 MCU名称定位它的功能

每一款STM32 MCU都有具体的名字,而这些名字由统一的规则进行约束,因此了解这个规则是很有必要的,而记住这个规则就再好不过了,因为如果记住了这个规则,那么在任何场合任何时候提起任何一款STM32 MCU都可以马上知道这款MCU的特性。 下面我们来研究一下这个规则,图1就是这个规则的全部,虽然每个人都看得懂这个图的含义,但是为了更好的记住这个规则,我们稍微深入一点来...

2019-03-10 21:28:21 437

原创 stm32f10x_conf.h是个什么东东?

先问个问题:如果某个C文件中要用到I2C外设库、GPIO外设库,那该怎么办?相信大家都会异口同声的说把这两个外设的头文件包含进来不就可以了吗,确实是这样的。但是当多个文件需要包含各种外设头文件的时候,是不是得为每个文件逐个的添加这些头文件呢?如果是这样的话,还真有点繁琐,这时有人说,干脆把头文件全部通过include组织在一个文件中,并且先全部注释掉,工程中需要哪些头文件就把这些头文...

2019-03-03 13:34:24 15202

原创 STM32之---数码管动态扫描

如果按照惯例,第一个实验一般是LED流水灯,但是我相信大家的胃口绝不仅仅满足于区区一个流水灯,因此给出了一个稍微复杂一点的实验,这个实验就是通过动态扫描的方式让这8个数码管分别显示0~7这8个数字。在这个实验中,大家将正式迈入STM32的开发大门。 上图为实验的原理图,8个数码管为共阴极数码管,它们的每一段分别接在一起,分别形成了a、b、c、d、e、f、g和h这8...

2019-02-28 23:26:37 17374 8

空空如也

空空如也

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

TA关注的人

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