
嵌入式
@ping
没有平凡的经历,就不会产生伟大的业绩。
展开
-
j-flash烧写NXP的S32k1**系列单片机(jlink)
背景都通过jlink工具来烧写单片机用编译器 下载程序,正常用j-flash,配置上默认打开,只配置对应型号单片机,SWD下载方式,烧写异常(擦除都不能成功),小概率能烧写成功。解决方法查看相关单片机数据手册,发现需要一定转换序列来转换模式,查找结果如下。即根据此说明,在j-flash中配置相应的转换序列。其他:其他单片机如果有烧写问题,也许可以像这样查找相应数据手册,看有没有需要写入相应序列。欢迎指正错误...原创 2021-03-18 10:31:50 · 2979 阅读 · 1 评论 -
#记录jlink烧写失败过程
不知道什么原因导致jlink给单片机(S32K148)烧写程序,怎么也烧不进去。猜测是因为烧写的时候电平不稳,导致单片机锁住了。打开j-flash软件,点击连接,一直出现Failed to connect。还有出现一些其他原因,如could not find core in coresight setup后面通过按着复位键去连接,竟然意外能连接上了。不过要进行Erase chip,又出现了如下问题:接着我尝试打开J-Link Commander,执行以下命令,意外就可以了(之前..原创 2020-12-04 10:09:57 · 9195 阅读 · 1 评论 -
S32K1XX调试--irda红外通信
1、背景项目需要用到红外模块来通信,考虑到MCU自带irda功能,即确定使用irda通信来完成。但芯片自带irda功能,官网、手册以及各个论坛均未找到配置irda流程,项目又比较赶,于是决定模拟时序收发。2、时序2.1 红外发使用uart时序。原uart时序高电平,对应红外的时序为低电平;原uart时序低电平,对应红外产生38KHz的载波(根据红外型号,我这里是用到38KHz),载波这里我用到占用比为50%的方波。2.1 红外收因为红外发送是使用uart时序,即接收也是uart时序原创 2020-09-30 10:03:42 · 970 阅读 · 0 评论 -
S32K1XX调试--S32K116的flash擦写程序移植
1、环境S32DS IDE2、背景NXP官方出的开发工具 S32KDS提供了图像化配置工具PE(Processor Export),所有外设可以在界面中配置,然后自动生成代码。这样虽然方便了点,但个人感觉对学习不是很有利。操作起来方便,但对底层接触的就比较少,想看他底层部分,嵌套太多层,看起来很累。所以我参考他们的寄存器版的程序,自己编写自己所需。但有些没有寄存器版本,例如flash的擦写部分就没有参考程序,所以我只能参考PE生成的程序进行移植。3、调试过程先找个官方基础例程,作为原创 2020-09-19 15:56:54 · 2875 阅读 · 2 评论 -
S32K1XX调试--快速定位HardFault
1、背景程序运行,发现程序跑飞到HardFault,但不清楚为什么会跑到HardFault中断处理函数去。2、分析要想知道为什么会跑到HardFault_Handler中去,就很有必要了解一下,程序上一条执行的是那条命令。根据汇编指令可以定位上条指令,但如果对汇编指令不是很了解的话,那就很头疼了根据单步运行也能实现定位,但如果程序量很大,又很杂,可能花费的时间就比较久些。3、问题查找提供一种不需要懂汇编指令的查找方法,方法如下:在中断处理函数中插入以下代码,以及另外定义原创 2020-09-19 14:44:58 · 3623 阅读 · 3 评论 -
S32K1XX调试--程序跑飞到DefaultISR
1、问题描述程序没有按原来要求进行,暂停之后,发现跳转到DefaultISR2、问题分析经查资料,这种问题,一般是因为触发了中断,但是其中断函数没有定义,所以跳转到这里3、问题查找定义DefaultISR中断处理函数,在此函数里面定义打印中断控制状态寄存器或是直接调试看地址0xE000ED04处的值调试查看寄存器的值,需要根据编译环境而定,这里不做说明在函数定义的参考代码如下:uint8_t buf[100];#define VECTORNUM (*(volatile u原创 2020-09-19 13:47:42 · 6121 阅读 · 6 评论 -
类似printf功能的函数
直接贴代码以及解释如下:/* 头文件 */#include <stdio.h> /* vsnprintf与vsprintf */#include <stdarg.h> /* va... */#define size 256char buffer[size]; /* 比较建议定义为全局变量,因为RTOS中的任务调用此函数时,会多占用任务的栈空间 */int uprintf(const char *f, ...){ int i = 0; va_list arg_p.原创 2020-09-05 09:50:28 · 1301 阅读 · 0 评论