自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 单片机IO模拟串口协议

嵌入式硬件平台调试中常用的debug方法是看串口打印定位问题,但有时候会遇到单片机没有串口外设或者串口引脚被占用的情况,这时候也可以在代码里操作空闲的IO输出不同个数的脉冲来达到调试的效果,但是要用逻辑分析仪抓线逐个看波形比较费劲。既然都IO抖线了,干脆抖个串口协议出来算了,通过控制IO口电平变化模拟串口协议。

2023-08-27 14:25:08 1160

原创 一种通过篡改特定代码数据修复嵌入式产品BUG的方法

本文提出一种嵌入式产品中通过对原代码少量Flash数据进行直接篡改的方式来修复固件bug的方法,这也许可以作为一个产品的后门使用。

2022-09-09 15:52:42 672 1

原创 【BLE】HID设备的实现(蓝牙自拍杆、蓝牙键盘、蓝牙鼠标、HID复合设备)

最近拿着蓝牙自拍杆出去拍照时,突然想了解下其中的原理,写下了自己的学习过程。本文涉及蓝牙自拍杆、蓝牙键盘、蓝牙鼠标、蓝牙复合设备的实现。

2022-09-05 00:16:51 9642 2

原创 【USB】STM32模拟U盘进行IAP程序更新

USB插上没反应,不能枚举,可能是堆栈不够,加大堆栈试下。

2021-01-04 08:47:37 5133 4

原创 【USB】STM32模拟USB鼠标

1、前言本实验使用STM32F103ZET6开发板为例,实现了模拟USB鼠标的功能,并且能够在电脑上控制鼠标完成鼠标具备的功能。2、工程搭建使用STM32CubeMX配置工程,非常方便高效,配置如下:使用外部高速晶振作为时钟源。勾选使用USB外设,STM32F103ZET6只有USB Device功能,没有HOST功能,而且只有一个USB外设,使用PA11(USB_DM),PA12(USB_DP)管脚。勾选USB DEVICE功能为HID设备。时钟配...

2020-12-27 12:22:59 8737 4

原创 【ucos】ucos移植到s3c2440

一、ucos简介ucos是micrium开发的一款专门针对MCU的嵌入式操作系统,具有优秀的性能。之前上大学的时候学过一门嵌入式系统相关的课程,书本上也是用ucos这款操作系统作为范例来进行讲解学习的,可见这个操作系统是得到业界的一致认可的。我最早接触到嵌入式操作系统也是这个。如今网上可以查到非常多的ucos移植资料,包括将它移植到各种各样的平台上。如果想看纯净的未修改过的代码的话,可以到官网去下载源码(https://www.micrium.com/downloadcenter/),官网提供不同...

2020-12-05 16:42:20 1139 5

原创 【JZ2440笔记】DMA

目录一、前言二、实验目标三、实验分析四、程序编写五、实验总结一、前言DMA可以独立于CPU之外进行数据的搬移操作,因此在大量数据需要进行迁移时可以利用DMA的优势,减轻CPU的负担,从而提高系统的性能。二、实验目标使用DMA模块将一片RAM内存的数据搬移到另外一片内存。三、实验分析S3C2440A 支持 4 通道处于系统总线和外设总线间的 DMA 控制器。DMA 控制器的每个通道都可以无限制的执行系统总线与/或外设总线之间设备的数据移动。换句话说,每个..

2020-07-19 18:26:52 275

原创 【JZ2440笔记】定时器

目录一、前言二、实验目标三、分析四、代码编写五、实验总结一、前言定时器可以说是任何单片机中的标配外设了,学过那么多种MCU,定时器模块非常简单,几乎都是一样的工作流程。用一个寄存器不断的计数来标记经过的时间,这个计数寄存器溢出后可以触发中断等事件,定时器模块一般都捆绑有PWM功能,就是再加一个比较寄存器,当比较寄存器中的值与计数器值相等时改变IO的电平,实现PWM控制。当然,S3C2440定时器模块也是一样的。二、实验目标采用定时器0实现定时器中断,每隔1秒改变1次.

2020-07-19 18:01:22 356

原创 【JZ2440笔记】串口通信(中断方式)

目录一、前言二、程序编写一、前言本文是在上一篇文章《【JZ2440笔记】串口通信》的基础上写的,上一篇使用的是查询的方式,这一篇使用中断的方式,具体的串口介绍和配置就不写了,都在上一篇了,关于中断方面的设置在《【JZ2440笔记】裸机实验使用中断》中有讲到,这里直接贴出本文代码。二、程序编写程序分为以下几个文件:head.S;启动文件。init.c:关闭看门狗,初始化时钟的函数。uart.c:串口相关配置。uart.h:串口头文件。main.c:主函数。.

2020-06-24 21:29:32 718

原创 【JZ2440笔记】串口通信

目录一、前言二、实验目标三、串口资源介绍四、程序编写五、实验总结一、前言串口通信是嵌入式开发中非常常见的调试工具接口,我们大都通过串口的打印输出来确定程序的运行状况,无论是在单片机还是在各种ARM处理器上,基本上都会有串口这个外设,以下是S3C2440的串口调试过程。二、实验目标通过JZ2440上的串口0实验与PC机的串口通信,波特率为115200、无奇偶校验位,8个数据位,1个停止位,并且开发板将串口助手发送的数据原样返回给串口助手。三、串口资源介绍..

2020-06-24 21:18:33 879

原创 【JZ2440笔记】系统时钟设置

目录一、前言二、实验目标三、S3C2440的时钟体系四、代码编写五、实验总结一、前言JZ2440开发板上的外部晶振是12MHz的,开发板一上电时S3C2440的系统时钟为12MHz,但是S3C2440最高系统时钟可以跑到400MHz,为了发挥CPU更高的性能,需要将外部晶振输入的12MHz时钟通过芯片内部的锁相环电路进行倍频,然后获得400MHz的系统时钟,使得CPU指令执行速度变快,同时也相应提升HCLK和PCLK总线的速度。二、实验目标将S3C2440的FCLK.

2020-06-23 22:12:58 412

原创 【JZ2440笔记】裸机实验使用中断

一、前言中断是打断当前程序执行,快速响应突发事件的一种机制。中断的触发源有很多种,比如外部引脚电平变化以及外设的各种事件中断等等,当中断发生时,S3C2440 CPU的PC指针跳往固定的中断向量地址处,执行中断处理函数,之后再返回到原先的程序断点处继续执行程序。二、实验目标采用按键中断的方式,通过JZ2440开发板上的三个独立按键分别控制开发板上的三个LED的亮灭。三、硬件连线独立按键连线如下:独立按键只用了三个,分别连接到了EINT0,EINT2,E...

2020-06-22 23:09:58 521

原创 一种基于线性反馈位移寄存器的随机数生成方法

以下介绍一种基于线性反馈位移寄存器的随机数生成方法,这种算法是某品牌MCU主控的随机数模块生成算法,主控上是电路直接实现的,产生随机数的速度很快,用C代码描述如下:#define WORD unsigned short#define DWORD unsigned intvoid GetRndValue(WORD wSeed, WORD *pwRndValueBuff, DWORD wSize){ BYTE i; DWORD dwCnt; for (dwCnt = 0; dwCnt...

2020-06-17 22:40:02 1075

原创 【JZ2440笔记】裸机实验使用NandFlash

目录一、前言二、实验目标三、资源分析四、程序代码五、实验总结一、前言S3C2440芯片内部没有ROM可以放用户代码,所以用户代码需要被保存在外部的存储器当中,如果是NorFlash的话可以直接在NorFlash中运行程序,但是NorFlash比较贵,一般都用NandFlash作为存储介质,以SDRAM为代码的运行空间。JZ2440开发板上有一颗256MB容量的NandFlash芯片,记录下学习过程,代码是开发板自带的例程。二、实验目标在SRAM运行程序关闭看门狗,初.

2020-06-17 00:08:21 358

原创 【JZ2440笔记】裸机实验使用SDRAM

S3C2440A 存储器控制器为访问外部存储的需要器提供了存储器控制信号。S3C2440A 包含以下特性:–大/小端(通过软件选择)–地址空间:每个 Bank 有 128M 字节(总共 1G/8 个 Bank)–大/小端(通过软件选择)–除了 BANK0(16/32 位)之外,其它全部 BANK 都可编程访问宽度(8/16/32 位)–总共 8 个存储器 Bank6 个存储器 Bank 为 ROM,SRAM 等其余 2 个存储器 Bank 为 ROM,SRAM,SDRAM 等–7 个固定的

2020-06-15 22:16:31 387

转载 【转载】C语言、嵌入式中几个非常实用的宏技巧

宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段。但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印。 特别是对于异常情况的打印,我们需要快速定位到异常情况的位置。 这时候我们可以使用宏定义来封装一个宏打印函数,这个宏打印函数可以显示打印信息所在的文件、行数、函数名等信息。如: 左右滑动查看全部代码>>>#define&n...

2020-06-10 23:58:08 199

原创 【JZ2440笔记】裸机实验点亮LED

一、前言最近在学韦东山的JZ2440开发板,于是记录下学习过程中的笔记。一般学程序写的第一个例子是打印“Hello World”,而学单片机的第一个例子一般都是点亮LED,学ARM的话如果从裸机开始学,也跟玩单片机差不多,从点亮LED开始。二、实验步骤1、目标点亮开发板上的3个LED灯。2、硬件连线点亮LED需要S3C2440芯片的IO引脚GPF4、GPF5、GPF6输出低电平即可。3、寄存器配置和玩单片机一个套路,配置IO模式(GPFCON...

2020-06-10 23:34:30 674

原创 STM32调试MIPI RFFE协议

一、前言前阵子手里有几个天线调谐器芯片,1.5x1mm的BGA封装非常小,通信控制协议是MIPI RFFE协议,这个协议网上资料比较少,搜了一下搜到了一个标准的MIPI协议文档,里面各种控制时序和介绍都写的非常详细了,其实就和I2C这类的协议差不多吧,然后在CSDN上又找到了一个STM32用GPIO模拟MIPI RFFE协议的文档资料作参考,稍微改了改,调试的时候遇到了一些问题,然后用逻辑分析仪抓了抓波形改了改代码,然后调试成功了,本文进行调试总结。七、参考资料...

2020-05-24 00:21:03 11766 8

原创 大学时积累的51库函数,包含常用外设及传感器的操作

一、前言记得那是刚上大一的时候,学校电子设计创新实验室的学长们自发的组织单片机技能培训,每次周末都会安排几个小时的培训,那时候自学了C语言,开始了自己的单片机之旅,记得那时候拿着个51单片机控制LED跑流水灯、做个避障小车什么的还挺好玩的,大一下学期加入了实验室,在学长的建议下积累下来了当时的一些模块代码,做成了一套属于自己的库函数,整套代码注释非常详细,都是自己当时用心一个字一个字手敲...

2020-05-08 12:30:58 1190

原创 FPGA专题——锁相环

目录一、前言二、程序三、实验分析一、前言在实际使用过程中,有时候需要得到不同频率的时钟,锁相环(PLL)可以对输入时钟进行倍频或者分频,以生成各种其他频率的时钟,在FPGA工程中,可以直接调用altera的IP核锁相环,FPGA型号为EP4CE6E22C8。二、程序模块框图如下:这里将50MHz的晶振时钟信号通过sys_clk引脚输入锁相环,然后经过倍频...

2020-05-03 16:31:21 7391 2

原创 FPGA专题——串口通信

目录一、前言二、串口RS232协议介绍三、程序设计四、实验分析五、总结六、参考资料一、前言最近在利用空闲时间学FPGA,学到串口通信这里了,跟着例程做了个串口收发的实验,FPGA型号EP4CE6E22C8,FPGA接收PC发来的数据然后原样返回给PC,通过这个实验加深了对串口232通信协议的认识,同时在实验中发现了一些关于串口模块的问题,在这里进行记录。二...

2020-05-03 05:19:48 2803

原创 STM32定时器触发DMA传输及产生特定控制时序的应用

目录一、前言二、电路设计三、程序设计四、总结五、参考资料一、前言最近闲着没事,搞了个“旋转LED”的小电路板,自己设计的电路板,上面有64个贴片LED排成一排显示,本文要介绍的是用定时器触发+DMA传输的方式在IO口上产生74HC573和74HC238的控制时序,完成循环点亮64个LED的功能。记录下调试的过程。二、电路设计用的单片机是STM32F103C...

2020-05-02 16:15:46 9050 3

原创 纠错码专题——线性分组码的纠错能力

一、前言本文是在我的上一篇博客基础上展开的描述,上一篇介绍了线性分组码的概念、生成矩阵和校验矩阵,简单的举了几个例子,在最后的一个(4,2)线性分组码例子上,码字如果出现了错误是无法纠正的,原因是该线性分组码的纠错能力的限制,这一篇详细说明其中的原理,过程中会尽量多举例子。二、线性分组码的最小距离、检错和纠错能力想要了解线性分组码的检错和纠错能力,即一个已知的线性分组码,怎...

2020-04-20 01:07:10 15671

原创 随机数生成方法及其应用

一、前言最近公司的一个项目,需要对一个功能模块进行性能验证,具体什么模块就不说了,验证过程中需要生成大量的随机数,因为程序是跑在一个单片机平台上的,所以没有像PC上的程序那样可以有各种随机数API调用,第一个想法是用个定时器不断的计数,将计数器的值当做随机数,但是需要在一个for循环里不断生成大量随机数,运行速度很快,定时器时间基本没太大变化,产生的数据关联性太强,所以这个想法落空了。第二个想...

2020-04-19 19:33:16 5372 1

原创 纠错码专题——线性分组码(1)

目录一、前言二、纠错码的作用二、线性分组码的定义三、生成矩阵四、校验矩阵五、生成矩阵和校验矩阵的关系六、线性分组码的译码一、前言线性分组码包括一大类的纠错编码在内,有汉明码、循环码、LDPC码等等,之前了解这些编码也是在网上搜搜资料,看看博客这样去学习,在网上搜索资料的时候发现一个问题,例如在看很多人写的汉明码博客时,很多人都一味的去追求“通俗易懂”,讲汉明码的...

2020-04-12 02:23:53 21737 11

转载 UBER、RBER和MTBF的概念

123123456SSD有几个关键指标来衡量其可靠性:UBER、RBER和MTBF。UBER: Uncorrectable Bit Error Rate,不可修复的错误比特率;RBER: Raw Bit Error Rate, 原始比特错误率;MTBF: Mean Time Between Failure, 平均故障间隔时间。1. 数据可靠性我们接着看一下上面的S3710 SS...

2020-04-12 00:10:18 4509

转载 Erasure Code - EC纠删码原理

Erasur...

2020-03-26 01:17:34 754

转载 卷积码的维特比(Viterbi)译码

本文转载自《卷积码的维特比(Viterbi)译码》https://www.cnblogs.com/ncdxlxk/p/9240938.html翻译 | 卷积码的维特比(Viterbi)译码 对维特比译码的接触很早就开始了,也想过要写一篇总结性的文章,但无奈心中一直有几个疑团没能得到合理的解答。比如什么时候开始进行回溯译码比较合适?维特比译码的性能相比分组码...

2020-03-22 23:01:22 6202

原创 无损压缩算法专题——miniLZO

一、miniLZO介绍miniLZO是一种轻量级的压缩和解压缩库,它是基于LZO压缩和解压缩算法实现的。LZO虽然功能强大,但是编译后的库文件较大,而minilzo编译后的库则小于5kb,因此miniLZO为那些仅需要简单压缩和解压缩功能的程序而设计,所以适用于单片机等嵌入式系统使用。另外miniLZO的压缩率并不是很高,LZO算法看重的是压缩和解压的速度。miniLZO下载地......

2020-03-08 13:49:08 11954 16

原创 CMD执行命令行时卡住的问题

公司编译工程项目时用了一些bat文件以命令行的方式来自动完成编译过程,但是发现一个问题,执行bat的时候Windows下弹出命令行窗口,总是会时不时出现“假死”的情况,然后命令执行就停在那里了,试了试在命令行上敲击键盘按键,又可以继续向下执行。又有一次打开命令行执行一个Python代码的时候,离开电脑一阵子回来后发现程序没跑过,就也是出现了类似的情况,后来终于发现了问题所在。Wind...

2020-03-03 21:35:30 12288 1

转载 RPMB(Replay Protected Memory Block)介绍

文章转载于:《蛋蛋读UFS之八:RPMB》 [http://www.ssdfans.com]在UFS里,有这么一个LU,主机往该LU写数据时,UFS设备会校验数据的合法性,只有特定的主机才能写入;同时,主机在读取数据时,也提供了校验机制,保证了主机读取到的数据是从该LU上读的数据,而不是攻击者伪造的数据。这个LU就是RPMB(Replay Protected Memory Block)LU...

2020-03-03 17:08:06 3958

原创 STM32运行程序到底ROM快还是RAM快?

目录一、前言二、ROM和RAM程序运行速度实验三、预取指令技术四、实验分析五、结论六、参考资料一、前言最近在网上查找资料学习STM32如何将代码搬到RAM中去运行,于是查看了一些前人的博客,介绍了KEIL的分散加载文件(sct文件)和将特定的函数定义到RAM地址的方法,然后又顺便提了下在RAM中运行程序速度会有所提升,当然我一开始也是满满的赞同,学习嘛,总是要跟着前...

2020-02-23 15:14:58 8968 11

原创 NES专题——NES的游戏硬件

摘要一、卡带(Cartridges)NES的游戏都是基于游戏包的。游戏本身是存储在卡带的ROM芯片内的。一些卡带还具有RAM功能,由电池供电,以使游戏得以保存。卡带下图显示了Famicom和NES的卡带之间的差异。任天堂为Famicom设计了一个基本的卡带,但是其他开发者设计了自己的卡带,有各种形状、大小和颜色。任天堂用NES按照标准设计生产了卡带。尽管NES的...

2020-02-18 20:35:08 3350

原创 NES专题——PPU工作原理

目录摘要一、2C02概述二、PPU内存映射三、PPU寄存器四、调色板五、图案表六、名称表/属性表七、精灵八、滚动九、电视标准十、参考资料摘要本文介绍了NES游戏机上PPU的工作原理以及背景和精灵图像的显示方法,本文参考《Nintendo Entertainment System Documentation(任天堂娱乐系统文档)》,如需对PPU进一...

2020-02-18 20:24:15 7100 6

原创 NES专题——6502CPU指令集及特点

目录摘要一、2A03概述二、CPU内存映射三、寄存器四、中断五、寻址模式六、指令七、参考资料摘要本文主要介绍6502CPU的内存映射、寄存器、中断、寻址模式以及指令等。为详细参阅《Nintendo Entertainment System Documentation(任天堂娱乐系统文档)》CPU部分后的总结,只摘出了重要部分,如需进一步了解6502CP...

2020-02-18 20:11:30 10206 1

原创 NES专题——NES游戏机简介

一、FC、NES、红白机的关系及发展史1983年7月15日,由日本任天堂株式会社(原本是生产日式扑克即“花札”)的宫本茂先生领导开发的一种第三代家用电子游戏机:FC,全称:Family Computer,也称作:Famicom;在欧美发售时则被称为nes,全称:Nintendo Entertainment System;在中国大陆、台湾和香港等地,因其外壳为红白两色,所以人们俗称其为“红白机”...

2020-02-18 19:57:25 3221

转载 NES专题——一块带给无数人年少欢乐的CPU(6502)

《一块带给无数人年少欢乐的CPU》http://www.sohu.com/a/120175586_162522

2020-02-18 19:46:09 7400

原创 STM32使用SRAM扩展内存

目录一、SRAM介绍二、STM32F103系列的FSMC模块三、初始化配置及数据访问四、使全局变量定义在外部SRAM中的方法五、参考文章及资料一、SRAM介绍SRAM(StaticRandom-AccessMemory)即静态随机存取存储器,所谓“静态”是指这种存储器只要保持通电,里面存储的数据就可以一直保持,但是掉电之后就会丢失。与DRAM(动态随机存取存...

2020-02-03 15:16:47 15788 3

原创 emWin专题——emWin简介及模拟器的使用

一、emWin简介1、emWin和ucGUI的关系记得刚上大学的时候接触到单片机领域的一个图形界面叫ucGUI,也是跑在STM32上的,后来过了没多久网上查资料发现大家都是用的emWIn了,了解了一下它们之间的关系,其实是同一个东西。emWIn是在ucGUI的基础上发展起来的,两者同属一家公司(SEEGER)开发,没错就是咱买的JLINK调试器的那家公司,以前旧版本的ucGUI是开源的,后...

2020-01-30 13:58:47 12752 1

原创 VS下生成C程序静态库(LIB)及动态库(DLL)的方法

一、前言工作中有时候因为分工合作的原因需要让别人调用自己写的代码去完成某项功能,但是又不想让别人看到具体的实现过程,只是提供一个API形式的接口供别人调用;又或者是其他的一些原因,有必要学习静态库及动态库的相关知识,本文大多数内容均为参考网上资料后的整理,作为学习的总结。二、DLL与LIB文件的区别lib是一个二进制文件,与dll类似,供其他程序调用。lib与dll的区别是:dl...

2020-01-27 13:50:21 6043

51单片机外设及常用传感器库.rar

大一时积累的51单片机库函数,包含了中断、定时器,串口通信等标准外设的使用,还有1602液晶、红外解码、I2C、SPI协议、TFT液晶、DS18B20等等常用传感器的使用,代码注释非常详细。

2020-05-07

QT音乐播放器

一个迷你版的QT音乐播放器,主要实现音乐播放、暂停、切换、音量大小调节,快进、添加和删除歌曲等基本功能,同时背景可以根据歌曲切换而切换,有歌词显示的功能,

2019-01-15

空空如也

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

TA关注的人

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