自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Keil和STLINK调试记录

在调试的时候发现,正常下载完程序后,程序能够运行,但是使用STLINK调试的DEBUG在线仿真时候出现一直卡在 0x1FFFF3E0 0549 LSLS r1,r1,#21] ; @0x1FFFF020, 也就是说代码一直进不了main函数,后来发现原因是:BOOT0与GND相连接的电阻虚焊了,导致BOOT0没有接GND,测得BOOT0电压有1.0V左右。 通过重新焊接电阻让BOOT0接GND就恢复正常。从上表看出,我们要让程序运行在内部FLASH中,BOOT0必须接GND...

2021-09-28 11:16:50 446

原创 C语言宏定义和内存地址+1陷阱

#define _ACCESS_UINT16_MEMORY_(addr) (*((volatile unsigned int*)addr))如上添加了1个宏定义,将地址addr转成1个16位指针,然后再取出其中16位的数据。在使用过程中,比如A为1个绝对地址,假设为0x5000,则访问时候如下2种方式是有区别的:(1) _ACCESS_UINT16_MEMORY_(A+1) (2) _ACCESS_UINT16_MEMORY_( (A+1) ) 对于方式(1),由于.

2021-09-07 15:52:09 1415

原创 SPI总线之“ 一主多从 “注意事项

SPI总线为最常用总线,但是不同厂家的SPI芯片或者不同的硬件电路,对于SPI的参数,主要是

2021-09-02 18:16:17 4335

原创 STM32 SPI读取MLX90363

MLX90363是一款三轴磁编码器,采用SPI总线与主控CPU通讯传输数据,通讯协议规定每条报文的最后一个字节为CRC校验字节。参考melex官方的教程用STM32通过SPI方式完成MLX90363的驱动,采用全双工方式通讯,发现发送完读取角度报文后,返回得到的数据总是为Error Message, 并且通过对报文内容分析得到 具体错误内容为 Incorrect CRC,也就是说MLX90363收到的数据CRC校验不通过。仔细检查了以下几项:1.确保发送报文最后一个字节的CRC计算正确2.确

2021-08-11 22:27:47 1464 2

原创 STM32 Keil STlink调试总结2#

对于STM32F103系列单片机,在程序中可以通过配置禁止 JLINK或者STLINK的调试口功能__HAL_AFIO_REMAP_SWJ_DISABLE();__HAL_AFIO_REMAP_SWJ_NOJTAG() ;另外就是cubeMX默认情况下的Debug选项是这样自动生成的代码也是将JLINK和STLINK禁用了,应该选择成若出现以上情况,则下载出现的现象是: 第一次能够顺利下载成功,之后下载就会一直出现No Target Connected具体解决方案..

2021-08-03 19:17:35 862

转载 STM32 Keil STlink调试总结

在Keil中使用STlink对STM32F103C8T6下载的时候,出现报错Flash Timeout.Reset Target and try it again,如下图所示仔细检查了对应的Debug->Setting中能够检测到STlink并且设置正确如下Utility中也选择了正确的芯片和容量后来经过搜索查看发现如果对Flash设置了写保护,那就无法对Flash进行编程和擦除,因此需要通过stlink utility进行解除写保护才能下载程序,具体操作如下在..

2021-08-03 19:03:42 2183

原创 代码调试总结-2#

ss ssssss1.程序的核心就是2大块: 流程+数据。 也就是通过流程不断的处理和变换数据,即y=f(x), 其中y和x就是数据,流程就是f。 y和x都是实际内存的数据,我们看到的都是真实的数据,我们需要编写和调试的只是f, 但是我们无法看到整个f的执行流程,只能通过看y,x来判断f是否正确,因此代码调试的核心就是: 查看数据。要想尽一切办法去看到x,y, 通过x,y的值来判断我们的逻辑f是否正确。2. 器件操作时间:对于嵌入式编程来说,经常需要调用驱动去操作实际的外围器件,而操作器件都..

2021-07-10 16:03:54 159

原创 cubeMX设置STM32扩展外部RAM (IS62WV51216BLL) 时序说明

在项目中遇到STM32操作外部扩展RAM数据的时候,读写十分费时间,查得cubeMX用FSMC扩展外部RAM的配置时,将时间相关参数都设置成非常大,导致访问外部RAM特别费时。通过分析IS62WV51216BLL的读写时序图和时间特性参数,得到较合理的时间参数,大大优化了外部RAM的操作时间。下面先介绍下前面3个参数:1.Address setup time: 从设置引脚地址开始到能够读取数据的时间段2.Data setup time: 设置完地址后,能够读取数据总线的时间段3.Bus

2021-07-10 15:18:16 2803 2

原创 代码调试总结-1#

代码调试总体可分为两大块:时间(时序)调试,空间(分块)调试。1.时间(时序)调试:仔细分析整个代码执行的正常逻辑顺序,假如一个任务执行分为5个步骤,则依次排查每个步骤,找出有问题的步骤,以为modbus主站发送流程为例,假如出现主站通讯速度很慢,要想定位到具体原因,则需要把整个主站通讯的时序流给梳理出来: 1.请求线程打包报文->2.发出发送请求->3.中断发送->4.等待从机回应->5.中断接收报文->6.接收完成一帧->7.拆报文解析。 则可以使用调试工具和

2021-07-08 23:38:22 1097

原创 Keil C语言 宏重复定义 问题分析与处理

根据C语言的语法:1.在不同源文件中定义同名宏,该文件中只识别当前文件的宏。2.在同一源文件中多次定义同名宏,则宏为最后一次定义的值。一般第1种情况不会出现什么问题,因为该宏仅仅在自己的.c文件中被使用,但是第2种情况,若某个.c文件包含了2个头文件,这2个头文件都定义了同名的宏,那么这个.c文件将认最后一次包含定义的宏,这样可能并不是我们想要的结果。由于有时候头文件是层层嵌套包含的,一旦出现问题很难查到原因。举例:example1.h 中 #define MAX 10exam...

2021-07-06 17:12:03 6338 2

原创 Keil通过编辑.sct(分散加载文件)将指定.c文件内定义全局变量存在外部扩展RAM(FSMC扩展IS62WV51216)

背景:STM32通过硬件FSMC接口扩展了一片IS62WV51216,该芯片的容量为512K的16bit,即1024K的byte,也就是1M byte,容量为0x100000。 下面为STM32的FSMC的存储区域划分图其中bank1用来分配给外扩SRAM用,ban1的总大小为256M, ban1又划分了4个子区,每个子区64M,这4个子区的访问首地址是由硬件的FSMC_NEx来决定的。举例我们使用FSMC_NE4连接扩展SRAM,则区域对应首地址为0x6C00 0000。3.下面通过修..

2021-07-05 17:20:44 1332

原创 PIC单片机SPI接口配置

一般所有单片机的SPI接口都需要配置以下几点内容(CPU作为SPI主模式):1.引脚功能/方向配置:标准SPI接口由4根线组成,SCK,MISO(SDI),MOSI(SDO),SS(CS),其中SCK,MISO,MOSI都应设置成SPI功能,并且SCK和MOSI设置成输出引脚,MISO设置成输入引脚,SS引脚设置成普通GPIO功能,并且设置成输出。2.SPI参数配置:...

2021-06-28 15:29:49 2139

原创 PIC单片机通用定时器使用说明

一般所有单片机的定时器用做普通定时功能,都需要具备以下几点要素:1. 时基:时基就是定时器的时钟来源,一般都是来源于内部时钟或外部时钟,并且一般都能设置对应的分频系数,因此要弄清楚 时基来源,分频器设置,设置完时钟来源和分频器就知道计时的最小单元。2.当前计数器: 该寄存器反应的就是当前实时的计数值,这个计数值在每个计时最小单元的时间内加1或者减1。3.计数匹配器: 一般向上计数的定时器肯定需要1个计数匹配器,当前计数器从0开始加1,一直加到与计数匹配器相等,则认为定时时间到,这个时候将置位..

2021-06-25 11:12:15 1596

原创 PIC单片机gpio配置与使用步骤

配置步骤如下:第一步:首先配置ANSELx寄存器,将IO口定义为数字IO,还是模拟输入IO第二步:配置TRISx, 将IO口定义为输入,还是输出第三步:若定义IO口为输入,则要得到IO端口的实际电平,则直接读取PORTx寄存器,若将IO口定义为输出,则通过写LATx来达到对IO口置高低电平操作。注意:若直接写PORTx寄存器,实际上会写入到LATx中,所以一般不写入PORTx寄存器,而直接读取LATx寄存器,读取到的是锁存在GPIO Latch中的数据,而不是真正...

2021-06-22 17:05:14 1710

原创 PIC内部看门狗使用总结

PIC的看门狗是一个系统定时器,使用内部低频31Khz时钟源作为时钟,定时范围为1ms-256s。看门狗的配置步骤如下:通过配置字 配置WDTE<1:0>来选择看门狗d

2021-06-17 19:34:55 1126

原创 PIC中断配置相关总结

PIC单片机的中断系统图如下所示

2021-06-17 17:48:23 1088

原创 PIC时钟源选择与内部时钟源配置总结

总体上PIC单片机的时钟源分为内部和外部2种,内部是由内部的时钟产生电路完成,经过分频器后提供给CPU作为主频时钟,外部又可分为2种,如上述1,2,3则是来源于其他源的直接

2021-06-17 16:19:09 1324

原创 PIC单片机配置字Configuration Bits使用经验

1.PIC16F1518单片机在其存储器0x8007和0x8008地址有2个配置寄存器,用来配置整个芯片的功能。其具体定义如下:

2021-06-17 14:47:03 2203

原创 PIC开发环境MPLAB路径设置问题

背景:之前在做项目的时候发现,今天完成的项目文件夹,后面来做的时候在这份的基础上复制一份出来,然后打开复制出来的工程,工程里打开的.c和.h文件还是yuan

2021-06-16 14:04:44 2009

原创 单片机硬件看门狗使用经验分享

1.既然选择使用硬件看门狗,就是想尽可能在只要得电情况下,看门狗就起作用,因此不应该通过软件的方式去使能和禁止开门狗,默认只要得电看门狗就起作用。这样防止程序出现异常,刚好开门狗又被软件禁止了,...

2021-06-16 11:57:59 1973

原创 Altium Designer学习->PCB图翻转

点击查看(view)->翻转板子(flip board),就可以看到翻转后的PCB图

2021-06-15 18:07:54 2457

原创 Altium Designer学习->PCB图中快速找到元器件

方法三:进入到PCB图,在菜单栏中选择“编辑—>跳转—>器件”,会弹出对话框,输入相应元件标号(这儿,写上U23),则鼠标会移动到相应元件上。(这儿,由于截屏时没有截取下鼠标箭头,这儿用蓝色圆圈标明)...

2021-06-10 19:34:48 3804

原创 STM32的Hal库对于定时器TIM使用细则2

有影子寄存器的寄存器实际上对应了两个寄存器:一个是用户可以写入或读出数据的寄存器,称为preload register(预装载寄存器),另一个是用户看不见的、但在操作中真正起作用的寄存器称为shadow register(影子寄存器)。我们修改的定时器周期、预分频系数、通道的比较值等都是修改的表面那个预装载寄存器,要让这个修改起作用,就还要把预装载寄存器的值赋给影子寄存器才行。从ARR预装载寄存器传送到影子寄存器,有两种方式,一种是立刻更新,一种是等触发事件之后更新;这两种方式主要取决于...

2021-06-10 18:28:29 1546

原创 嵌入式编程规范

嵌入式项目都分为硬件和软件,一般我们首先会拿到一块硬件样板和一份原理图和PCB图,针对于看原理图,首先我们应该先看总图(如果没有总图,脑子里也要有个总tu)

2021-06-10 14:03:29 80

原创 STM32的Hal库对于定时器TIM使用细则1

在使用hal库配置定时器步骤一般分为1.配置分频数PSC,决定时基快慢。2.配置装载值ARR,决定要计数多少个时基才到定时时间。然后启动定时器开始工作,这样定时器每次从0开始每次计到ARR就认为定时器到时,触发中断通知CPU本次计时结束,并且...

2021-05-28 23:32:03 1488 2

空空如也

空空如也

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

TA关注的人

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