自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 资源 (6)
  • 收藏
  • 关注

原创 FCARM - Output Name not specified, please check ‘Options for Target - Utilities‘

keil 报 FCARM - Output Name not specified, please check 'Options for Target - Utilities'可能是添加文件时文件类型选择错了,选择了 Image file(*.*)解决方案,将添加的文件删除掉,然后选择ALL添加就可以了。...

2021-08-27 17:03:23 805

原创 MPU和MMU、MPU和MCU的区别

一、MMU vs MPU内存是现代计算机最重要的组件之一。因此,它的内容不能被任何错误的应用所篡改。这个功能可以通过MMU(Memory Management Unit)或者MPU(Memory Protection Unit)来实现。尽管这个两个东西有同样的基本功能,但是它们之间还是存在一些不同。MMU被认为是比MPU更先进的设备。MMU能完成MPU的所有工作,并且它还具备MPU没有的一些高级特性。MMU具备而MPU不具备的特性包括:缓存控制,总线仲裁,bank切换。这些特性是更复杂的计算机所需要

2021-08-26 23:58:24 5325 1

原创 项目复盘步骤

一、什么是复盘通俗地讲,就是对你所做事情的反思,可以是优点也可以是缺点。笔者进行复盘的出发点,一方面是想在一个项目中,有什么东西可以沉淀下来,下次做事情的时候可以直接用;二是这次有哪些地方做得不够好的地方下次有更大的进步空间。朝着这两个方向去提高自己。所谓复盘,原本是一个围棋术语,指在下完一盘棋后重新摆一遍,看哪里下得好、哪里不好,然后进行分析和推演。简单来讲就是对你所做之事的反思。发现了优点,就寻思着怎么固化、强化、规模化;发现了缺点,则可以追本溯源然后对症下药。复盘是回顾、反思、探究、提升的

2021-08-26 15:02:27 4336

原创 C语言函数的可重入性

一、不可重入函数。在函数中如果我们使用静态变量了,导致产生中断调用别的函数的 过程中可能还会调用这个函数,于是原来的 静态变量被在这里改变了,然后返回主体函数,用着的那个静态变量就被改变了,导致错误。这类函数我们称为不可重入函数。在 嵌入式系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多.

2021-08-24 23:52:54 2154

原创 C语言 printf 的用法总结(完善中)

printf函数是一个“可变参数函数”,其函数的参数的个数和类型都是可变的,每一个参数的输出格式都有对应的格式说明符与之对应,从格式串的左端第1 个格式说明符对应第 1 个输出参数,第 2 个格式说明符对应第 2 个输出参数,第 3个格式说明符对应第 3 个输出参数,以此类推。其中,格式说明符的形式如下(方括号 [] 中的项为可选项):%[flags][width][.prec][length] type/*用中文标识如下:*/%[标志符][宽度][精度][长度]类型符1、类型符(t

2021-08-17 14:42:06 3298

原创 用之前使用正常的keil工程调试程序时,一直卡在 0x00000000 的解决方案

如图所示,一个用了挺久的工程,之前调试都正常,最近调试发现代码进入调试后不直接进入main函数,堆栈一直卡在0x00000000,汇编窗口显示在某个不确定的位置运行,但是不用调试时程序执行正常。这种情况下很可能是keil的工程出现了问题,新建一个工程,然后把所有代码copy到新工程就可以解决问题了。...

2021-08-16 10:43:40 2322

原创 keil 分散加载文件

keil 分散加载文件link.sct文件内容; *************************************************************; *** Scatter-Loading Description File generated by uVision ***; *************************************************************LR_IROM1 0x08001000 0x0000

2021-08-15 15:31:56 355

原创 ISP、IAP、ICP三种烧录方式的区别

我们常见的MCU / CPU 代码烧录方式主要有以下三种:一、ICP(In Circuit Programing):在电路编程,可通过CPU的Debug Access Port 烧录代码,比如ARM Cortex的Debug Interface主要是SWD(Serial Wire Debug)或JTAG(Joint Test Action Group);二、ISP(In System Programing):在系统编程,可借助MCU厂商预置的Bootloader 实现通过板载UART

2021-08-15 09:42:18 3679 1

原创 stm32070 ota 步骤

一、整体思路项目使用STM32F070,需要通过IAP进行固件升级,将flash分为4块,最小一块为boot,第二块为app区,第三块为backups区,此区域大小与app区大小一致,第四块为data区,存放一些固定数据。二、添加链接文件; ************************************************************* ; *** Scatter-Loading Description File generated by uVision..

2021-08-13 16:02:20 1023

原创 华普微A2119 驱动协议问题查找思路

在一款mcu更换项目中,发现接收到的数据出现了错位,所以导致数据丢包。

2021-07-24 00:04:36 442

原创 如何 用 keil 读出芯片中的程序并保存?

背景,在某次用flash模拟eeprom时,突然发现程序不跑了,怀疑是擦写flash时将code区擦除了,遂开始一系列测试,打算将芯片中的读出来查看。1、设置keil工程(1)将硬件调试中的Load Application at Startup 去掉勾选(2)将flash 配置中的芯片擦写改为不要擦写,将Program 、Verify、 Reset and Run等的勾选去掉。2、进入芯片仿真,并点击全速运行(注意,此处必须点击全速运行,否则memory中的数据会不准,实测是

2021-07-03 18:46:17 20716 2

原创 C语言中Volatile与Register关键字

目录区别:volatile的用途:Register的用途:区别:register:这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个 CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多 register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。volatile:的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RA..

2021-06-30 21:44:27 767 1

原创 stm32 堆栈存放分析

一、理论数据存放数据在SRAM中的存放情况,最下层为静态数据区,再上层是堆区,最上层是栈区,二、栈存放:(1)栈底地址:在map文件中搜索STACK,可以看到该工程的栈底地址为0x200002a0(2)栈顶地址:在map文件中搜索__initial_sp,可以看到该工程的栈顶地址为0x200003a0(3)栈占用大小:根据上面的地址信息,则可以推算该工程的栈大小为 0x200003a0 - 0x200002a0 = 0x0100在启动文件中查到栈分配大

2021-06-29 21:54:23 1312

原创 Cotex-M MSP和PSP 指针

MSP和PSP 的含义是Main_Stack_Pointer 和Process_Stack_Pointer,在逻辑地址上他们都是R13;以下摘录子,cotex-M3权威指南Cortex-M3内核有两个堆栈指针:MSP-主堆栈指针和PSP-进程堆栈指针,在任何一个时刻只能有一个堆栈指针起作用,也就是说任何一个时刻只能使用一个堆栈指针,要么使用MSP,要么使用PSP。何为堆栈指针,其实就是普通的指针,只是他们指向两个不同的堆栈。MSP:主堆栈指针,当程序复位后(开始运行后),一直

2021-06-23 21:51:09 5077

原创 keil 查看 sp指针值的方法

进入debug模式,然后依次点击view->Registers Window就可以看到sp指针的值

2021-06-20 16:40:04 2158

原创 1、j-link报The connected j-link is defective. proper operation cannot be guarantee

1、j-link报The connected j-link is defective. proper operation cannot be guaranteed在更新完j-link的驱动之后报错 The connected j-link is defective. proper operation cannot be guaranteed。经过查找资料之后发现是j-link固件和j-link驱动程序不兼容引起的问题。可以升级j-link固件或者降低j-link驱动程序的版本来解决。我这边使用的

2021-06-07 00:04:39 5417 1

原创 pwm对电机的影响

0 引言PWM即脉冲宽度调制,PWM调速就是在固定的频率下,通过控制电力半导体器件在一周期内的开通与关断时间,调整直流电机两端的电压大小,从而调节电机转速[1]。PWM调速具有控制方便、调速平滑、响应速度快等优点,因此在直流电机调速领域中被广泛采用[2-3]。PWM调速主要靠电压的调整,而电压的变化对直流电机的转矩、机械特性也会造成影响。为研究这种影响的变化规律,设计直流电机驱动电路进行实验,通过调节PWM波的占空比和频率来进行对比试验,然后对实验数据分析计算,得到PWM调速对电机运行特性的影响。1

2021-05-31 23:59:50 19817 2

原创 嵌入式 bin 、hex、ELF文件的区别

一、bin和hex文件生成在单片机开发中HEX文件和BIN文件是非常常见的烧写文件格式,以常用开发环境Keil为例,分别创建HEX和BIN文件,比如:1、创建HEX:在Keil里面可以通过勾选【魔法棒>Output>Creat HEX File】让工程输出HEX文件。2、创建BIN:在Keil中在【魔法棒>User>After Build/Rebuild】标签下勾选Run #1,同时在其对应的User Command文本框中输入fromelf --bin --out.

2021-05-28 00:25:28 1988

原创 合宙Air720UH链接阿里云流程

本篇文章是自己用Air720UH mqtt协议链接阿里云的一些经验,以及遇到的一些问题及解决,如果有误,欢迎各位指正。Air720UH简介:Air720UH/Air720UG 是合宙通信推出的LTE Cat.1 bis 模块, 采用紫光展锐的UIS8910平台, 支持 LTE 3GPP Rel.13 技术。是4G全网通模块, 可适应不同的运营商和产品,确保产品设计的最大灵活性。可以支持VOLTE;可以支持SPI LCD;支持多种开发方式,如USB上网、标准AT、 Lua脚本二次开发等,并...

2021-05-25 17:23:18 1192

原创 华大 HC32L130 调试问题总结

目录1、串口问题2、adc检测问题3、时钟频率1、串口问题由于该芯片的引脚不能容忍 5v 的电压,所以如果输入的电压超过3.3v时会对芯片的adc检测产生干扰,造成adc参考电压不准。但是Ch340等的usb转串口芯片出来的电平信号都为5V,所以最好对芯片rx脚的信号进行电平转换。2、adc检测问题该芯片adc的软件触发只能触发一次,转换完成后,自动结束adc转换,和单次转换没有区别,比较鸡肋。和stm32软件触发后持续进行转换有区别,使用需要注意。3、时钟频率该芯片

2021-05-25 11:07:55 3227 2

原创 盛芯微 SYD8810 蓝牙芯片调试问题总结

1、晶振问题该芯片在不是用蓝牙功能时外部 32M的晶振也必须要加,该芯片的内部震荡电路需要用外部晶振进行校准才能达到1%的精度偏差。不用外部晶振校准时内部晶振偏差会达到惊人的40%,根本无法使用。2、新芯片不能烧录程序问题解决新的芯片需要先烧录蓝牙配置的4K文件后才能进行调试,否则在烧录到一半时一直会报找不到内核3、引脚拉电流灌电流大小该芯片引脚的拉电流最大为4ma,最大灌电流电流为20ma,所以在驱动led等的指示灯时,最好使用低电平驱动。4、调试口复用该芯片的调试口不能复

2021-05-24 23:11:38 2021

原创 PFC 电路的作用

PFC电路的工作原理是由电感电容及电子元器件组成,体积小、通过专用IC去调整电流的波形,对电流电压间的相位差进行补偿。自从用电器具从过去的感性负载(早期的电视机、收音机等的电源均采用电源变压器的感性器件)变成带整流及滤波电容器的容性负载后,其功率因素补偿的含义不仅是供电的电压和电流不同相位的问题,更为严重的是要解决因供电电流呈强脉冲状态而引起的电磁干扰(EMI)和电磁兼容(EMC)问题。这就是在上世纪末发展起来的一项新技术(其背景源于开关电源的迅速发展和广泛应用)。其主要目的是解决因容性负载导...

2021-05-24 00:38:02 7484

原创 敏矽 ME32S003芯片使用的一些体会

1、boot引脚两个boot引脚必须在上电时必须上拉,或者悬空,不然会导致不能进入用户程序。这是和其他的cortex-M0内核芯片不同的一点,使用时需要注意。2、外部中断触发在使用外部中断下降沿中断时,在上升沿上升时间比较长时,上升沿也会被识别为下降沿。我这边出现问题的点在于进行按键识别时,原理图如下最终的解决方案(1)硬件上,将消抖滤波的电容由0.1uf变为 10nf,使芯片引脚的上升沿变短,最终执行后效果还是不佳,据芯片FAE讲是因为该芯片比较低端,所以在引脚滤波部分有一

2021-05-23 23:39:31 1925 3

原创 逻辑分析仪采样率和采样深度

目录一、采样深度:二、采样率:三、实际应用:一、采样深度:采样深度:即对被测信号一次采集的样点总数。它直接决定了一次采样所能采集到的数据量的多少,显然深度越大,一次采集的数据量越大。二、采样率:采样率:也称采样速率,即对被测信号进行采样的频率,也就是每秒所采集的样点数。它直接决定了一次采样结果的时间精度,采样率越高,时间精度越高。一次采样结果的时间精度就等于“1/采样率”,即一个采样周期。三、实际应用:一次采样过程所持续的时间等于“采样深度÷采样率”,那么在进行采样.

2021-05-23 16:17:27 6428

原创 示波器的带宽和采样率

目录一、带宽二、采样率三、带宽与采样率的关系一、带宽带宽是示波器的Y通道端口工作带宽。模拟示波器中随着输入信号的频率升高,通道放大器的增益会逐渐下降直至影响到测量精度,数字示波器同理则还要考虑到ADC。一般衡量绝对带宽的界限是频响曲线的-3dB节点,此时频响曲线刚好下降3dB。一般示波器的频率响应是从DC(0Hz)开始的,标示带宽50MHz可以认为表示示波器的输入频率响应范围为DC-50MHz。示波器的带宽至少应比被测系统最快的数字时钟速率高5倍。如果我们选择的示波器满.

2021-05-23 15:58:08 13450 2

原创 keil 封装lib

目录1.创建lib2、使用lib3、注意事项4、个人总结在团队工作中,经常会有模块维护和代码封装的问题。把需要封装的代码打成一个lib无疑是一种很好的方式。1.创建lib(1)将工程中不需要要打包的文件给移除(2)选择输出.lib文件(3)编译文件(4)生成.lib文件,在output文件夹中找到生成的.lib文件(5)总结创建一个lib很容易,只需要创建一个target,然后把需要封装的代码全部加进来,然后再Options of ...

2021-05-23 15:12:10 1760 1

原创 一次数据强制转换引起的思考(Mcu大小端模式)

目录一、问题:二、大小端:三、结论:四、解决方案五、常见mcu的大小端一、问题:某次,在对某mcu flash进行操作时,在该地址写入数据 0x12345678用该语句对数据进行读取时,发现读出的数值顺序反了,感觉很奇怪,之后发现可能是数据存储大小端模式的问题。0x78 = *((volatile uint8_t*)(0x00007E00+0))0x56 = *((volatile uint8_t*)(0x00007E00+1))0x34 = *((volat

2021-05-22 13:45:59 1298 6

原创 单片机 iap和flash擦写的关系

IAPIAP(In Applicating Programing)在应用编程,即通过用户程序对用户程序进行升级,这样就可实现用户自由升级而不影响应用。比如一款支持IAP的单片机,这里以目前正在使用的CH559单片机举例,我们可以人为的将其内分成三个程序区,1作引导程序区即BOOT区域,2作为运行程序区即用户程序区域,3作为下载区。芯片通过满足触发条件(用户自己设定)进入引导区运行引导程序,在BOOT程序下将目标程序下载到下载区,下载完成并校验通过后再将下载区内容复制到用户程序区,运行复位程序,IAP完.

2021-05-13 19:27:08 508

原创 adc的重要参数

1、转换速度所谓的转换速率(Conversion Rate)是指完成一次从模拟信号到数字信号的AD转换所需的时间的倒数。积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行/串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是ksps和Msps,表示每秒采样千/百万次(kilo / Million Sam

2021-05-13 00:09:27 5718

原创 python 图片处理相关函数及用法

1、Image.open 打开图片Image.open("blank_background.png")2、im2.resize 单张图片变化大小(1)原型:img.resize((width, height),Image.ANTIALIAS)(2)参数:第一个参数,目标图片宽度第二个参数,目标图片高度第三个参数,目标图片质量Image.NEAREST :低质量Image.BILINEAR:双线性Image.BICUBIC :三次样条插值Image.ANTI...

2021-05-10 23:01:32 2276 4

原创 stm32 printf 进入 HardFault_Handler

由于程序中使用了freertos,所以最终查出来是每次任务切换时都会导致进入HardFault_Handler,有可能是printf的不可重入性导致的问题。最终在printf前后进行开关中断即可解决问题。

2021-04-20 16:57:08 1415 3

原创 IAR调试卡顿的解决办法

可能是iar的设置文件有问题,造成卡顿解决方法:第一步:删除settings文件第二步:重命名文件第三步:重新打开文件即可恢复正常

2021-04-13 14:24:34 2648

原创 AD导入封装出现cannot match pads with new footprint问题

问题:出现问题的原因:新的封装,跟原来生成网络的元器件封装,焊盘的管脚Designetor名称不一致。解决方法:在pcb图中将需要修改的器件先删除掉,再重新导入器件,即可正常导入qi器件...

2021-03-31 21:50:21 13749

原创 AD13 整个pcb旋转任意角度

在画圆形的一些pcb时不好布线可能会用到将pcb转一个角度,方便布线第一步:ctrl +A将整个pcb选中第二步:选择要旋转的整个PCB,在菜单栏上选择Edit --->Move ---> Rotate Selection第三步:输入旋转角度第四步:选择参考点,一般选择为原点。第五步:旋转完成...

2021-03-23 22:55:43 13055

原创 端子型号,PH,XH,ZH,EH,VH

PH,XH,ZH等这些都是JST的料号,因为JST用的最多,且很多工厂都在模仿制作,故也大多起这样内的代号,以便选型者更容为方便的知道与JST的匹配情况。 每个代号都是一个系列的产品,他们最大的区别就是Pitch(俗称间距)不一样,这都是表示端子脚与脚之间的距离(Pitch), 几个常用的间距FH0.5mmSH1.0mmGH1.25mmZH1.5mmPH2.0mmEH/XH2.5/2.54mm(这两个其实是一样的)...

2021-02-28 23:16:38 21068

原创 华大HDL136X芯片adc用dma方式进行采样

///< ADC中断服务函数void ADC_IRQHandler(void){ //大概10us进入一次中断 if(TRUE == Adc_GetIrqStatus(AdcMskIrqSqr)) { Adc_ClrIrqStatus(AdcMskIrqSqr); //进入中断之后,再次开启adc转换 Adc_SQR_Start(); }}///< ADC采样端口初始化static ...

2021-02-27 23:27:49 2624 6

原创 ARM Compiler 6 优化等级

-O0:没有优化。不推荐在ARM Compiler 6.6中使用-O1:有限的优化。这是当前源代码级调试的推荐级别。-O2:优化速度。由于许多循环展开和函数内联,代码大小将增加。-O3:优化速度。比-O2生成的代码更快,但更大-Os:平衡的优化。优化的速度,代码大小的增加是合理的。-Oz:纯粹优化代码大小ARM Compiler 5提供了4个不同的优化级别0到3。它们的行为和优化等级有关,优化等级越高,代码越小。ARM Compiler ...

2021-02-04 00:34:18 2119

原创 嵌入式PID算法

在自动控制中,PID及其衍生出来的算法是应用最广的算法之一。各个做自动控制的厂家基本都有会实现这一经典算法。我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景。1、PID算法基本原理PID算法是控制行业最经典、最简单、而又最能体现反馈控制思想的算法。对于一般的研发人员来说,设计和实现PID算法是完成自动控制系统的基本要求。这一算法虽然简单,但真正要实现好,却也需要下一定功夫。首先我们从PID算法最基本的原理开始分析和设计这一经典命题。PID算法的执行流程是非

2021-01-31 23:59:31 1403 1

原创 Risc-V 内核

关于RISC-V在伯克利大学诞生的经历,本节在此不做重复赘述。因为多年来在CPU领域已经出现过多个免费或开放的架构,很多高校也在科研项目中推出过多种指令集架构。因此,当笔者第一次听说RISC-V之时,以为又是一个玩具,或纯粹学术性质的科研项目而不以为意。直到笔者亲自通读了一遍RISC-V的架构文档,不禁为其先进的设计理念所折服。同时,RISC-V架构的各种优点也得到了众多专业人士的青睐好评和众多商业公司的相继加盟。并且2016年RISC-V基金会的正式启动在业界引起了不小的影响。如此种种,使得RIS

2021-01-31 23:57:17 4075

原创 Altium Designer 13 将pcb图导出为stp文件

1、点击 file -> Save As,弹出下图的框,选择保存类型为:Export STEP(*step,*stp)2、设置导出选项3、导出成功

2021-01-27 19:46:40 10321

OTA文件整理.zip

需要使用cotex-m0进行ota的可以进行下载

2021-08-15

八段数码管常用配置工具

该工具用来配置八段数码管显示的内容,可以非常便捷的配置数码管的显示,使用非常的便捷,支持工阴共阳数码管的配置。

2020-12-08

安富莱C语言编码规范.pdf

c语言编写规范一直受到大家的重视。但是在本人刚开始学c时一直不知道该遵循哪些规则,软件写的比较随意,之后随着深入了解到了一些规范。本文是在看到安富莱电子论坛的规范之后,决定整理成文档,供自己之后查阅。

2020-06-07

《高质量c++ c编程指南》带书签版本.pdf

软件质量是被大多数程序员挂在嘴上而不是放在心上的东西! 除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C++/C程序怎么会有那么多的毛病?” 别难过,作者只不过比你早几年、多几次惊慌而已。 请花一两个小时认真阅读这本百页经书,你将会获益匪浅,这是前面N-1个读者的建议。

2020-05-31

DHT11驱动程序,基于STM8

基于stm8开发的dht11驱动程序,有需要可以下载,和DHT21稍微有些区别

2019-09-04

tm1620_AT89S52.zip

TM1620 的原厂驱动程序,有需要可以下载下来,基于AT89S52芯片编写

2019-09-04

空空如也

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

TA关注的人

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