自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 问答 (1)
  • 收藏
  • 关注

原创 如何用好const关键字

1 修饰变量、数组表示此变量为常量,功能同 #define(但宏定义更优)2 修饰函数参数const关键字修饰函数参数,对参数起限定作用,防止其在函数内部被修改。所限定的函数参数可以是普通变量,也可以是指针变量。举例如下:voidfun1(constinti){i++;//对i的值进行了修改,程序报错}voidfun2(constint*p){(*p)++;//对p指向空间的值进行了修改,程序报错}3 修饰指针C语言中const修饰指...

2022-01-03 17:20:38 136 1

原创 Happy New Year . Hello World .

Happy New Year ! Hello World !

2022-01-01 22:41:34 247

原创 无法安装MP1开发板上的NFS

开发板在连网状态无法安装nfs-common

2021-12-05 19:09:03 1408 4

原创 可重入函数 = 安全函数

函数是否安全?在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。可重入函数简单来说,就是可以被打断的函数。就是说,你可以在这个函数执行的任何时候打断他的运行,在任务调度下去执行另外一段代码而不会出现什么错误。也可以

2021-11-06 21:13:08 120

原创 IAR for ARM 无法烧写

一直用的IDE都是Keil,最近因为需要用到一款芯片涉及到IAR来写,因为只有

2021-10-30 21:36:55 862

原创 【FreeRTOS】安富莱的V4开发板无法将串口配置为奇校验?

在安富莱的FreeRTOS的V4开发板的例程里,将串口配置为校验位为Odd,再将串口调试助手同步为Odd,串口助手上收到的打印数据为乱码。Even也一样是乱码。只能将此校验位设置为None,才可以正常打印数据。调试了多个工程文件,都是一样的现象,不清楚该怎么解决了? /* 第4步: 配置串口硬件参数 */ USART_InitStructure.USART_BaudRate = UART1_BAUD; /* 波特率 */

2021-10-04 22:07:00 2090 1

原创 【ARM调试笔记】系统所有电路板全部接上并供电时,MCU无法工作。

问题:所有电路板全部供电时,MCU不工作。描述:电源板给A板供电,并通过A板中的切换开关控制对B板、C板和D板的供电,供电电压有+5V、-5V和+13V、-13V,给单独某块板供电没有问题,但四块电路板同时供电时,串口无法发数,IO口无法切换,MCU无法正常工作。原因分析与解决:在初始化语句中将切换开关的IO口配置好并打开开关,尝试使用硬件仿真来处理,硬件仿真加入中断可以正常执行,怀疑是由于切换开关同时打开造成瞬间电流过大而导致问题,于是将各个开关IO口的开启语句加入300m..

2021-03-08 11:16:38 763

原创 【C】16进制高4位低4位转ASCII码

由于通信协议的要求,将16进制的高4位和低4位分别以ASCII码形式通过串口发送给上位机软件。/** *** 16 Hex change to ACSII *** 输入: 十六进制 *** 输出 : Ascii **/u8 AsciiTop , AsciiBtm ; // 定义为全局变量void HexToAscii_SendTopBtm(const unsigned char HexValue){ u8 HexTop, HexBtm;

2021-03-03 08:52:08 2001

原创 【ARM笔记】调试EERPOM时碰到的若干问题

问题1现象:EERPOM的参数丢失或改变。原因1:在更新EEPROM过程中,断开电源。解决方法1: a.更改设计避免在写入EEPROM过程中断开电源; b.增加100uF的电容,断电后瞬间维持EEPROM供电正常至EEPROM写入完成。原因2: 在EEPROM读写过程中进入了中断服务程序,而中断服务程序也调用了EEPROM读写函数。解决方法2: a.保证EEPROM读写函数的第一句是cli(),最后一句是sei(); b.中断服务程序不直接调用EEPROM读写函数,如果SRAM足够大使用

2021-02-24 10:25:48 306

原创 【C】float型数据取绝对值abs后数据不对?

问题使用函数abs将数据进行计算后,发现并没有得到预期的数值,正常状态下值应将-0.77的负号去掉得到正值,但实际出来结果却为0。解决abs的用法是针对整形变量的,double型变量取绝对值为fabs, float型变量取绝对值函数为fabsf。改为此函数fabsf即可得到正确数值0.77。...

2021-02-19 16:42:40 2164

原创 【C】如何用好CONST关键字?

(1) 修饰变量、数组(2) 修饰函数参数(3) 修饰指针(1) 修饰变量、数组表示此变量为常量,功能同 #define(但宏定义更优)(2) 修饰函数参数const关键字修饰函数参数,对参数起限定作用,防止其在函数内部被修改。所限定的函数参数可以是普通变量,也可以是指针变量。举例如下:void fun1(const int i){ i++; //对i的值进行了修改,程序报错}void fun2(const int *p){ (*p)+..

2021-02-18 17:24:13 60

原创 搜狗输入法如何添加自定义的日期格式?

搜狗输入法如何添加自定义的日期格式? 比如2021.02.161)搜狗输入法-我的设置-高级-自定义短语-设置2))添加新定义缩写:date 该条短语在候选项中的位置:2 内容:#$year.$month_mm.$day_dd...

2021-02-16 10:43:59 2318

原创 【ARM调试笔记】简化版的命名规则

前一版的主要是基于匈牙利命名法混合了大驼峰和小驼峰,在实际感受时发现自己基本用的都是unsigned char变量和unsigned long变量,这些变量占了我所用的变量的90%,全部替换后,发现读起来反而影响了我的程序的阅读性。于是自己琢磨了一个直观易读的简化版本。省略掉前缀而采用大驼峰小驼峰来区别全局变量和局部变量(静态变量视作全局变量处理),此版本更加符合我的命名习惯。...

2021-02-07 18:04:47 95

原创 【ARM调试笔记】自己整理的一套C语言的命名风格

部门内部并没有相关的代码编写规则,因此自己在综合了匈牙利命名法、Piscar命名法、小驼峰、蛇形命名法的各个方法的优点,形成一套自己的命名法则。如果有朋友有命名需要的可以参考一下。...

2021-02-07 15:17:51 85

原创 【ARM9调试笔记】ADC出数只第一次正常,后续的会有跳变

问题:在编写程序时,将ADC的采集置于定时器TIM0中断里进行,采集完成的8路数据在主函数里分别赋值给各个通道,发现一个问题,转换后的数据偶数个是正确数据,奇数个异常。怀疑:(1)是否ADC片子通道配置有误。但细找了代码后发现没有问题;(2)怀疑是各个通道之间互相干扰导致,此问题无法解决,只能换芯片,在评估板上用同样的程序烧写,发现也出现同样的问题;(3)怀疑定位到计数变量上,因为8个通道的数据在示波器中显示并没有出现任何的跳变,并且也不可能存在如此规则的奇偶跳变。解决:最后发现

2021-01-28 21:39:08 427

原创 【ARM9笔记】串口中断收发只进入一次?问题如何解决?

环境:使用STR912FAW44芯片,用MAX487将UART转成485信号与上位机联接。欲实现功能是:当从串口调试助手发一个数,进入串口中断后,返回1~10十个数。问题:程序烧进芯片后,第一次可以正常实现,但后续就无法再进入中断了。用硬件仿真模式观察发现第一次发完了数已经跳出中断回到main函数,再发数就不再进入中断了。解决:各个功能都正常,但进入中断后“清除中断标志位”,发送完成标志位等待也都正常配置。最终是试验了将串口助手发出的数给从中断里发回来,发现正常,但屏蔽发原数的语句后,在中断里发送连

2021-01-19 20:21:47 3347

原创 结构体、共用体、typedef简洁声明、及其具体用法

系统地研究了【结构体】【共用体】的构造及类型简洁声明、类型定义,变量定义,外部声明。可以做为今后处理结构体和共用体的原则规范,否则每次都用得非常乱。1. typedef (类型定义的简洁声明)typedef struct { u16 AX; u16 AY; u16 AZ; }AdDataTypeDef;// 相当于 typedef struct { u16 AX; u16 AY; u16 AZ; } AdDataNameDef;// .

2020-12-16 17:42:35 592 1

原创 AD7665软件硬件调试笔记(1)

AD7665简介AD7665是一款16位模数转换器,最大速率达570kSPS,采用+5V单电源供电。其包含一个高速16位采样ADC、内部转换时钟、错误校正电路以及串行/并行接口。AD7665的功耗由吞吐量决定,采样模式分为三种:①极高采样率模式(WarpMode);②快速模式(NormalMode),适用于异步转换率的应用;③低功耗模式(ImpulseMode),适用于低功耗的应用。它采用Analog Devices的0.6μm高性能CMOS工艺制造,封装为LQFP-48,额定工作温度范围为–4...

2020-11-18 22:55:02 971

原创 【调试】cannot stop ARM device

问题:MDK烧写时一直报错cannot stop ARM device,无法烧写。总体:从三个部分排查问题:硬件,软件及配置,烧写器。L战略方法:1. 芯片手册+原理图。2.利用示波器观察各个信号的波形,从根本上看是哪个信号产生的问题。3. 网上找相关的解决方法。4.逐级排查逼近(前→后;两端→中间;中间→两端)。H战略方法:逐级归因+对比实验+单一变量对照。与好的板子进行对比,参照好板向此方向靠拢。方法:工程路径 全英文方法:Reset脚处理,RST无法拉高导致方法:解决:从大电源

2020-08-18 23:58:23 944

原创 【调试】AD7665无法读出数据到ARM的串口上

问题:根据AD7665芯片手册编写转换程序与读取程序,在CNVSTn拉低后芯片正常转换完成后BUSY信号发送一个高脉冲,表示转换完成。再根据时序图将读取部分用程序写完后,发现无法读出正常的16位数据,无论采集电压值是1.8V还是2.5V或是其它都读成了0xFFFF。示波器测AD_SCLK的波形,发现恒为3.3V,未发出正常的时钟信号。方法:将自己编写的程序烧入到开发板中,便可确定是硬件还是软件问题。方法:通过STR9官方SSP示例程序来配置IO口,在硬件正确无误的基础上往往就是IO口的配置有误造成功

2020-08-18 23:41:49 395

原创 Error: Flash Download failed

问题:烧写程序时报错 Error: Flash Download failed选择对应的芯片以及在“Add Flash Programming Algorlthm"窗口添加上实际使用的芯片参数。

2020-08-13 21:55:30 4010

原创 Keil 仿真时变量“not in scope“

问题:在调试程序的时候,函数返回值赋值给变量时,变量值总是显示"not in scope",无法看到变量被赋的值。出现这种情况的原因是这个局部变量没被分配到内存,或者变量被编译器优化了。编译器优化级别高的时候,编译器为了优化,可能并没有按照我们想要执行的代码汇编。解决:降低Keil的编译优化选项,如下图所示,优化等级改为0(默认为3)。...

2020-08-13 16:25:10 2386 3

原创 ARM9无法写入寄存器?

问题:在写ARM9的RTC时钟时,使用STR910库函数写年月日,发现无论写入任何值串口发出数据都为0。逐个排查后,逼近到原因是无法将RTC_CR寄存器给赋值0x80x,将此寄存器单独提到main函数里进行赋值,依旧无法正常实现。解决:ARM芯片不像51,其需要单独将各个外设的时钟SCU打开,使能时钟后,RTC寄存器才可以正常赋值,正常写入年月日参数。...

2020-08-03 18:06:00 419

原创 STR9官方示例程序中的一个小Bug——函数指针数组未定义

采用的是STR912FAW44的芯片,在官网上下载的Low power示例程序中存在这样的问题:LP_Func未定义。而LP_TestFunc[36]是一个函数指针数组,其第一个包含的内容definition后如图2。解决:将函数指针数组的类型定义即可。...

2020-07-08 09:00:22 668

原创 STR9串口多次发送,遗漏数据

❓问题:用串口发送三次三个数据11 22 33,始终在串口调试助手上只能收到11 22,无法显示33。用串口发送5次数据11 22 33 44 55,收到11 22 55。发送的数据与实际发送数据不符。✅ 解决:在每次发送的后一句加一句延时,延时太长只能进一次中断,延时太短发的数据还是错误。但五次发送时可以收到11 22 44 55。继续改进,每句串口发送后加入获取发送完成的flag语句,(当TX发送完成后flag置1),再接着while(!flag);。两句合起来即等待此次串口数据发送完成,

2020-07-04 17:59:59 288

原创 STR9官方示例程序无法进入中断

用的芯片是STR910FAW32,最近从官网下载了示例程序,但发现示例程序中的RTC周期中断和TIM定时器中断无法成功进入中断,其它的程序建了工程之后可以正常实现功能,对于中断来说一直无法正常进入中断。不知道是什么原因,哪位有遇到过这样的问题烦请赐教一下,不胜感激!...

2020-06-29 22:06:31 162

原创 ULINK2下载程序时出现 too many JTAG devices in chain 故障

尝试了网上搜着了几种方法,最后一种方法是自己根据现有资源JTAG烧写器进行尝试,最终成功解决此故障。方法1:Flash Load Demo将Hex文件烧写到芯片方法2:把ULINK的驱动全删了然后重新再装试试方法3:官方给出的解决方案,Either too many JTAG devices have been detected in the chain (maximum 64 devices are allowed), or the JTAG communication is corrupte

2020-06-25 22:37:34 1034

原创 施密特触发器之简单记忆核心

施密特比较器的核心理解点在于──当输出为低时,当且仅当Vin碰到高压线时,才会翻转为高电平。反之同理。除此以外的其它任何条件都保持原状态(低电平)不翻转。(以同相输出为例)...

2020-05-05 21:10:44 533

原创 输入阻抗、输出阻抗与阻抗匹配

输入阻抗与输出阻抗 阻抗(Impedance)的概念。在具有电阻、电感和电容的电路里,对电路中的电流所起的阻碍作用叫做阻抗。阻抗常用Z表示,是一个复数,实部为电阻,虚部为电抗。其中,电容在电路中对交流电所起的阻碍作用称为容抗(Capacitive Reactance),电感在电路中对交流电所起的阻碍作用称为感抗(Inductive reactance),电容和电感在...

2020-05-04 11:25:51 2208

原创 电压值是否正常状态的监测电路

功能:当电压偏离正常范围时,利用比较器LM339构成的电路模块进行监控(此原理图中的供电和各个电阻的参数仅作为原理解释说明)。原理:R3、R4为U1A的采样电阻,R8、R9为U1B的采样电阻,采样后的电压都为INPUT输入电压的1/10。R1、R2为U1A的参考电阻,R5、R7为U1B的参考电阻,此处为方便原理研究,VCC供电为10V,故U1A的反相端接入的参考电压为8V,U1...

2020-04-20 21:54:03 1314

原创 Altium Designer 新建元器件到现有的原理图库中

1)首先必须得新建[PCB]工程。步骤:文件→ 新建 → 工程 → PCB工程2)新建原理图(或是加入已有的文件[添加现有的文件到工程])。同样步骤,加入一个原理图库。3)效果如下图4)在中间界面中,画出元器件的原理图封装。(主要是画出焊盘位置)PS: PCB封装也同理,主要是焊盘位置,其它的可忽略。5)...

2020-03-19 14:04:31 3036 1

原创 时钟之小结

ARM芯片提供的时钟有好几种,过一段就开始弄混这个时钟是什么作用,那个时钟是什么作用。其实真正常用的只有两种时钟(本人可能用得比较浅 :-P )11.0592MHz ——HSE,高速外部时钟信号 32768Hz ——LSE,低速外部时钟在ARM芯片的应用中,最经常用的要数这两个时钟频率,其余的时候用到时根据时钟树再去针对性地复习一下即可。其中:11.0592MHz 主要对应于...

2020-03-19 10:00:21 215

原创 Nand Flash调试日志(6)——时钟配置

摘自《STR91xFA Reference manual.pdf》2.4.1 External clock sources。时钟配置根据《STR91xFA Reference manual.pdf》的Figure 22. Clock Control里的流程图来进行配置。首先需要对时钟源MCLK进行确定,在硬件中采用的是25MHz的晶振,利用锁相环进行倍频,将频率提升到96MHz,锁相环...

2019-09-19 20:17:28 719

原创 Nand Flash调试日志(5)——GPIO口的配置

GPIO的配置 是 软件与硬件的联接点!!!因为首次进行此类设计的原故,对于Flash及CPU的功能特性不是太熟悉,因此第一版设计后为Flash的AL、CL、E#、RB#四个功能pin脚连接到普通的GPIO口,并将其都设置为作为普通的GPIO口的特性。根据的是《STR910FAW32》芯片手册中的Table 5. Device pin description来对此四个口进行配置,都选择...

2019-09-13 15:00:57 583

原创 Nand Flash调试日志(4)——ARM与Nand Flash的硬件连接

《STR91XFA.pdf》中对硬件搭接进行确定。如下图 在我的原理图的硬件搭接中,采用的此方式进行连接,Port 8作为地址/数据口进行数据的传输。因为第一次使用此类的Nand Flash,在硬件连接上有一些考虑不周的地方,于是将EMI的功能实现pin脚中以下四个pin脚接至ARM9芯片的GPIO口上(见下表),根据时序图来写相应的Flash操作程序。...

2019-09-04 16:07:28 612

原创 Nand Flash调试日志(3)——Nand Flash接口定义

NAND Flash 的接口是高度复用的,其所有的命令、地址和数据的传输都是通过 8 位 I/O 口实现。而芯片内部识别 IO 口信号数据的类别是根据控制信号 ALE、CLE 等来判定的。这样做的明显优势是减少了面积的消耗,还可以降低电磁干扰,并且少量的接口可以使得电路的变化更加清晰明了。NAND Flash 控制信号对应芯片的状态如表所示,通过不同的控制线来发送不同的时...

2019-09-01 13:10:37 1931

原创 Nand Flash调试日志(2)——EMI参数配置、EMI内存map

根据《STR91xFA Reference manual.pdf》此使用手册的1.12小节External memory interface (EMI)中一步一步地进行EMI的配置,首先精读此章节,再根据此章节的内容及相关的寄存器来进行EMI的配置。在程序仿真中可以通过相关的操作来观察是否正确设置了这些寄存器,通过代码的调试来使得这些相关寄存器的指定位都配置正确。(1)E...

2019-08-27 16:48:48 1025

原创 Nand Flash调试日志(1)——时钟频率配置

在关于NAND Flash的调试中,首先是基于现搭的硬件来进行着相关的操作,以红牛板作为主要参考,辅助参考有① nand_factory.c(此程序是利用寄存器进行配置,然而我的flash并没有相关的寄存器可以进行配置,只是提供了一种思路,但不具备此次的参考性) ② 0507_L_FIRMWARE文件夹里的四个EMI相关程序(主要是参考此来进行EMI的相关配置)。1. 时钟频率配置目标:...

2019-08-23 11:18:46 2781

原创 Altium按1:1的比例打印PCB的指定层

1) 在PCB视图界面,点击[文件] → [打印预览];2) 在打印预览的界面中的中间区域的任意一处点鼠标右键,[页面设置],弹出如下图的界面,选择各个选项,设置成1:1。3) 设置完成1:1的比例后点击关闭,再在中间区域的空白处点鼠标右键选择[配置]4) 弹出配置的界面后,单独打印Top层。(在其下的比如Top Overlay双击弹出的窗口中...

2019-08-21 21:09:27 2083

原创 Altium规则设置的注意事项

在对应的规则中点 [高级的(查询)],再点击 [查询构建器…] ,弹出右上的窗口选择 [Belongs to Component],再选择需要设置规则的器件,依次增加。需注意:②中的内容重复一遍①的操作使两者完全一样;⑤处应该为OR 而非AND。PS:使用的版本为Version 13.0.12。...

2019-08-21 21:01:28 654

空空如也

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

TA关注的人

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