自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Qurry的博客

总有人要赢,why not be me.

  • 博客(46)
  • 收藏
  • 关注

原创 手把手教你写gpio模拟i2c协议

最近,投影仪的项目上用到了三轴陀螺仪(G-sensor),通过获取陀螺仪X,Y,Z的坐标来实现梯形校正的功能,硬件上使用的通信接口是i2c接口。

2024-01-25 23:37:09 976

原创 LCD屏接口与模式详解:干货超多

随着时代的发展,现如今我们生活上已经随处可见的各种电子产品了,诸如手机、平板、电脑、一些其它智能单品上都有用到显示屏,它作为人机交互的重要桥梁之一,我认为它是生活中必不可少的存在,如果少了它,那么这个世界也就缺失了独有的那份色彩。那么此篇文章我们就好好讲讲TFT-LCD屏的“故事”,下文将以lcd屏信号类型和接口模式展开。

2023-11-29 17:47:39 1678

原创 嵌入式LCD软件驱动流程与调试

1.首先确定硬件连线是否有问题,屏本身是否排线问题是坏的,把硬件问题排除完后,那剩下的只能是软件驱动的问题了;2.用万用表测量屏电压、VGH、VGL等电压范围是否正常,不正常的话在初始化中根据相应的命令去配置电压值;3.初始化配置寄存器是否有配置进去,这个可以使用逻辑分析仪看CS、CLK、SDA的数据是否正常;4.如果是HV模式,行、场信号的极性配置不对也可以造成不显示,或异常。

2023-11-29 17:47:35 346 1

原创 鸿蒙系统、澎湃系统和安卓系统的区别一看就懂

最近看了小米澎湃OS的发布会,这是继华为鸿蒙OS脱离Android OS后,国内发布的另一个重量级的操作系统。依稀记得,当初鸿蒙OS问世的时候,很多人都质疑它是Android OS的套壳,对鸿蒙系统提出了诸多质疑和否定。现趁着澎湃系统的发布之际,此篇文章就好好阐述HarmonyOS、HyperOS和Android OS的区别。

2023-10-29 21:51:57 5009

原创 Flash存储芯片:NOR Flash、NAND Flash、UFS和eMMC的比较与解析

在数字化时代的今天,数据的存储和管理变得越来越重要。各种各样的存储技术应运而生,以满足不同的使用场景和需求。其中,Flash存储芯片以其非易失性、可擦写性和可编程性等优势,占据了重要地位。本博客将详细介绍Flash存储芯片中的NOR Flash、NAND Flash、UFS和eMMC,分析它们的用途、优缺点,并对其进行比较。

2023-09-12 14:54:33 2986

原创 RS485、MODBUS通信协议浅显易懂篇

MODBUS协议是Modicon公司发表的一种串行通信协议,属于OSI模型中,现广泛应用于,它的主要特点是,传输介质可以是等。RS485处于,作为上层协议的通信接口,它是针对RS232的不足而诞生的新的接口,主要特点是。

2023-08-16 19:51:57 14783

原创 M62429L音量控制IC驱动

M62429L是一款串行数据控制的双声道电子音量控制器芯片,允许每个声道独立控制,音量为0dB~ -83dB,每级可控1dB。

2023-07-08 14:35:35 2077 3

原创 LVGL界面开发之模拟器环境搭建

通常我们在使用 LVGL 进行界面开发时,会先在PC上搭建模拟器环境,而不是直接烧录到硬件板子上,使用模拟器是百利而无一害的,而且它是跨平台的,任何Windows,Linux或macOS系统都可以运行PC模拟器。每当界面有改动时,都可以在PC模拟器上快速便捷地验证并查看修改。

2023-04-11 23:04:57 2217 1

原创 linux 网络编程socket

Socket=(IP地址:端口号),套接字的表示方法是点分十进制的lP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点所确定。

2023-01-27 18:20:16 4071

原创 TCP/IP协议族之TCP、UDP协议详解(小白也能看懂)

每个网络主机都会有一个IP地址,每个节点通过IP地址进行区分不同的主机,从而进行通信,路由器和主机都有一个IP地址。该IP地址是软件层面的一个地址,如192.168.xxx.xxx,而不是硬件层面的MAC地址。IP地址分为IPv4地址和IPv6地址。IPv4地址有32位正整数表示,IPv6地址由128位正整数表示。现在我们用的都是IPv4地址,将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。IP地址由网络标识和主机标识。

2023-01-12 18:27:51 4796 1

原创 linux 线程详解

进程有唯一的进程号PID,线程也不例外,也有唯一的ID号,线程ID不同于进程ID,它是只有在进程运行的时候才有意义。linux系统中,线程ID是一个无符号长整形数,可以通过函数获取线程ID。在shell终端编译链接的时候,由于pthread不在gcc默认的链接库中,需要在编译命令中使用-l选项指定链接库pthread,格式为:。

2023-01-11 17:06:20 889

原创 linux 信号

信号是在软件层面上对中断的模拟,也叫软中断信号,用于通知应用程序发生了异步事件。信号不进行数据传递,仅向进程传递异步事件。当硬件检测到异常时,将异常信息发给内核,内核再把异常信号通知到进程中;shell终端也可以生成信号,并通知给前台进程;程序中也可以通过系统调用,生成的信号可以发给自己,也可以发给其它进程。

2023-01-10 17:29:20 141

原创 linux 进程间通信详解

信号量是一个特殊的变量,它被用于进程的同步与互斥,而不是交换数据信息,它的值与相应资源的使用情况有关,值大于 0 时,表示当前可用的资源数的数量;值小于 0 时,其绝对值表示等待使用该资源的进程个数;只允许等待操作(P操作)和发送操作(V操作)。linux终端下输入命令“ipcs -s”可查看信号量信息。二值信号量是我们用的最多的,只有“0”和“1”两个值。以下仅根据二值信号量说明。p操作:如果信号量的值大于0,执行p操作就给信号量减1;如果信号量等于0,执行p操作进程挂起等待。v操作。

2023-01-10 11:47:30 674

原创 linux 进程详祥祥解

程序是指令、数据及其组织形式的描述,进程是程序的实体,进程是系统进行资源分配和调度的基本单位。每个进程都有自己的独立虚拟地址空间,进程与进程、进程与内核互不干扰,一个进程不能读取或修改另一个进程或内核的内存数据,因为它们映射的物理空间不同。进程号为1(init)的进程是所有其它进程的父进程。前台进程:该进程由终端运行并控制,终端与进程间可以进行实时交互,例如信息输入等;后台进程:该进程没有与终端交互,例如执行运行指令后面添加“&”,该进程就会在后台运行;ctrl + z也会让进程暂停为后台进程。

2023-01-05 16:38:24 884 1

原创 linux输出重定向

在Ubuntu的shell终端中输入命令,终端窗口上就会显示相对应的信息,假如现在你需要调试一款软件,默认调试信息是输出到显示屏上的,如果信息量巨大,问题复现的时候你就很难去查找出错信息,此时可以将调试的信息重定向输出到指定文件中,复现问题的时候去查看文件里的调试信息就会方便很多。概念简述标准输入:STDIN ,文件描述符为0,默认键盘为输入端;标准输出:STDOUT,文件描述符为1,默认输出到屏幕;错误输出:STDERR ,文件描述符为2,默认输出到屏幕;

2023-01-04 11:09:45 1011

原创 linux应用开发大杂烩(你不一定都知道的细枝末节)

linux内核(运行在内核态)提供了一系列的服务、功能以及硬件资源等,为了维护内核的稳定和安全,不允许linux 应用程序(运行在用户态)直接访问、操作linux内核资源,也就是说用户态无法直接访问内核态,应用程序如果需要访问内核要怎么办呢?这时候“中间商”系统调用便横空出世,linux内核中有一组用于实现系统功能的子程序,称为系统调用。

2022-12-30 19:54:46 1180

原创 低功耗蓝牙(BLE)你入门了吗

蓝牙低功耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart),用于医疗保健、运动健身、安防、工业控制、家庭娱乐等领域。在如今的物联网时代下大放异彩,扮演者重要一环,是无线通信的主流技术之一(常见的无线通信技术有NFC、GPRS、Zigbee、WiFi等),2021 年 7 月发布了蓝牙 5.3 版本,也是截止目前的最新版本。

2022-12-29 10:30:57 11806 4

原创 嵌入式图形库开发绚丽界面(lvgl、emwin、awtk)

早些年的单片机开发中,很多都是使用文字菜单界面,这种界面让人感觉非常的朴实无华,内容言简意赅,如果使用图形库进行开发,你的产品一下子就让别人觉得有点高级,更容易去接收它。对于现在来说,很多的嵌入式图形库都可以做出绚丽的界面,占用RAM小,网上资料也多,学习难度不大。下面仅介绍几款常用的图形库。

2022-12-26 15:15:38 14362 1

原创 通俗易懂讲明白定时器(stm32)

定时器是嵌入式开发中极其重要的一员,它可以分为软件定时器和硬件定时器。软件定时器很不精准,通过循环语句粗略的去计算延时的时间,对时序要求较高的场景是完全不适用的;硬件定时器在stm32中种类也是比较多的,基本定时器、通用定时器、高级定时器、低功耗定时器等,它们的基本特性相差无几,更多的是应用场景的不一样,例如高级定时器特性会更好一点(带可编程死区的互补输出、输出通道数更多等),意味着它的应用场景更高级,低功耗定时器功耗更低,可以在除待机模式以外的所有电源模式下保持运行,即使没有内部时钟源也可以运行。

2022-12-21 17:17:36 4045

原创 一篇让你完全弄懂GPIO的8种配置模式

开漏输出模式下,TTL施密特触发器是开启的,可以读取I/O口的状态;P-MOS管G极接vdd处于高电平,始终不工作、导通;N-MOS管G极输出一个低电平(输出电平信号从ODR输出数据寄存器中得来)的时候,N-MOS管导通工作,G极输出高电平时,N-MOS管不导通,这个时候I/O的电平状态是不确定的,这就是为什么配置为开漏输出后,无法控制为高电平,需要外接一个上拉电阻,使I/O口处于高电平。

2022-12-20 15:59:44 4589 4

原创 软件工程师也要懂的硬件知识(二极管、三极管、MOS管)

二极管,是一种具有两个电极的半导体器件,大多是使用硅或锗作为半导体材料,它最主要的功能特性就是只允许电流由单一方向通过(称为正向偏压),反向的时候阻断 (称为反向偏压)。加正向电压时,硅二极管达到0.7V时导通,锗二极管达到0.3V时导通。三极管,是一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号, 也用作无触点开关。作为软件开发,我们一般只需要懂得如何控制三极管的通断即可。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区(B)

2022-12-20 11:54:13 2752

原创 详解UART、I2C、SPI常用通信协议(全是细节)

UART、I2C和SPI是我们在嵌入式开发中比较常见的通信协议了,没有最好的通信协议,每个通信协议都有自己的优缺点;如果想要通信速度快,SPI 将是理想的选择,如果用户想要连接多个设备而不是过于复杂,I2C 将是理想的选择,因为它最多可以连接 127 个设备并且易于管理,UART的通信速度相对较慢,通信也比较简单,单对单。

2022-12-16 19:00:34 7646 1

原创 C语言Windows下实现音乐播放器

由于之前没有开发过Windows下跑的exe程序,听着歌,想着能不能用C语言写一个windows跑的音乐播放器呢?于是乎便开始探寻想法的可行性,难易程度,搜寻资料了解到,可以使用图形库做UI界面,而且学习成本不高,相对比较简单,看看文档示例很快就能入手;然后,播放声音的话可以调用,这个需要了解它的调用函数和操作指令,不需要全部了解,用到什么再去查什么,对症下药就行。

2022-12-14 20:57:18 2903

原创 C语言模拟双色球系统开发

近期有朋友双色球中了个小奖,所以临时兴起,写了个模拟双色球系统玩玩,购买规则、开奖以及中奖等级均模仿现实规则,小部分玩法自定。 开发此系统需要熟悉 C 语言指针的使用、结构体的设计;如果能轻松的写出来,说明你C语言掌握的已经算是相对熟练了,工作中应对中小型项目已经足够了,话不多说,直接开整。 首先,制定该系统需要实现的具体功能、玩法,初步制定好目标后,构思结构体如何设定才能更便捷的访问数据,把功能细分化,模块化,尽量减少重复代码,一个好的初步结构,会让整个过程事半功倍,所以必须构

2022-12-05 11:39:15 3721

原创 rk3399移植 u-boot (1)

基于迅为RK3399的开发板移植原厂 uboot ,记录 uboot 的移植的全过程,包括重点注意事项以及遇到的具体问题记录。

2022-11-30 14:51:09 2779 1

原创 ADB调试Android设备

ADB的全称是 Android Debug Bridge,安卓调试桥的意思,PC端使用ADB工具包就可以对你的安卓设备进行管理、调试了,比如说,设备间上传和下载文件、应用软件的安装和卸载、抓取日志信息等。使用adb工具包需要去熟悉 adb 指令,如果熟悉linux常用指令的,基本很快就能上手。

2022-11-24 11:46:42 6134

原创 C语言数据结构之树(保姆级讲解)

树是“一对多”的非线性存储结构,较链表、队列那些,树的概念会多点,涵盖的范围也较广。由根节点和若干子树构成;单个节点也可以看成树,只有一个树根节点

2022-11-21 18:35:59 2254

原创 Linux驱动开发之i2c框架讲解到例程

本篇章在rk3399平台上,基于设备树的i2c驱动开发。i2c直接使用硬件i2c总线,体系结构分为3部分:I2C 核心、I2C 总线驱动和I2C 设备驱动。(i2c-core.c)提供了I2C 总线驱动和设备驱动的注册、注销方法等。我们主要了解Linux中i2c的基本框架,分为和。主机驱动一般由芯片原厂开发,通常需要我们做的就是针对具体某个设备的设备驱动开发,硬件设备信息通过设备树描述。

2022-11-16 14:36:19 1974

原创 Linux并发与竞争

Linux系统是个多任务的操作系统,会存在多个任务同时访问同一片内存区域的情况,造成内存数据混乱,严重的话可能会导致系统崩溃;因此我们需要针对这一现象做处理。产生并发的主要原因有:①最基本的原因是多线程并发访问;②抢占式并发访问;③中断程序并发访问;④多核CPU间并发访问。并发访问产生对(即共享数据段)的竞争关系,所以对于临界区要保证只能有一个线程访问。

2022-11-04 15:24:55 169

原创 c语言数据结构之队列

不同于栈,队列是一个先进先出的数据结构,规定数据节点从队列尾插入,从队列头取出,禁止对头尾两端以外的数据进行操作。队列可以分为顺序队列和循环队列。

2022-09-25 18:45:38 1203

原创 c语言数据结构之栈

栈是一种的结构,只能对栈顶进行操作,数据入栈、出栈都在栈顶处,换句话说,栈只能对栈顶端进行操作,禁止跳过栈顶插入或删除其它数据。栈可以简单分为数组栈和链表栈;数组栈设定了空间大小,而链表栈在内存允许的范围内无空间大小限制,通过链表的方式将栈链接起来。

2022-09-23 10:33:37 803

原创 C语言数据结构之双向链表

前面介绍了单链表,由于单链表遍历查找是单向性的,故引出了双向链表的概念,也叫双链表,既可以向前查找,也可以向后遍历。

2022-09-21 17:46:49 1165

原创 C语言数据结构之单链表

链式储存相比顺序存储更灵活多变,不需要像数组一样预先给定大小,通过指针的方式将数据连接起来,只要内存空间允许就可以无限开阔下去。

2022-09-21 11:53:45 660

原创 linux 驱动开发之platform设备驱动一(4)

Linux 设备和驱动通常都需要挂接在一种总线上,例如PCI、USB、I2C、SPI 等的设备存在真实的总线,这自然不是问题,但是SOC上的外设控制器、挂接在SoC内存空间的外设等却不依附于此类总线。基于这一背景,linux形成了一种,相应的设备称为platform_device,而驱动成为platform_driver。platform总线的出现提高了代码的重用性、实现了设备与驱动的分离,增强了可移植性。之前的驱动开发是把驱动信息和设备信息都写在一起,当模块很多时,就大大增加了冗余代码,不易于维护开发。

2022-09-20 17:45:56 744

原创 linux 字符设备之LED驱动开发(3)

前面两篇文章我们已经对字符设备驱动开发有了具体的认识,光有理论是不够的,还需要通过实践去验证理论的真实性,不断地实践来强化对驱动开发的理解;因此,本篇章将在字符设备的基础上实现LED驱动的开发。准备工作如下:①需要硬件的原理图,从中知道控制LED的引脚号,控制方式(给什么电平信号LED工作);②需要一份芯片的数据技术手册,从中知道该引脚映射的地址,寄存器地址等。

2022-09-19 16:31:25 373

原创 linux 驱动开发之一文看懂字符设备(2)

字符设备是Linux 驱动中最基本的一类设备驱动,按照字节流进行读写操作的设备,读写数据是分先后顺序的,例如:I2C、SPI、鼠标、键盘、显示器等就是字符设备。Linux下一切皆文件,一般每个字符设备或者块设备都会在/dev目录下对应一个设备文件。linux用户层应用程序就可以通过该设备文件来使用驱动程序操作字符设备或块设备。前面介绍的杂项设备是最简单的字符设备。在驱动开发之前,我们需要搞懂字符设备、字符设备驱动(运行在内核空间中)和访问该设备的应用程序(运行在用户空间中)三者之间的关系。

2022-09-18 19:56:45 748

原创 linux 驱动开发之搞懂杂项设备(1)

Linux中将设备分为三大类:字符设备(I2C、USB、SPI等)、块设备(存储器相关的设备如EMMC、SD卡、U盘等)和网络设备(网络相关的设备WIFI等)。杂项设备归属于字符设备,每个设备节点都有和,设备号是识别设备的一种方式,Linux系统中有很多杂项设备,而杂项设备的主设备号固定为10。使用命令

2022-09-15 21:53:17 899

原创 Linux sys文件系统

sys文件系统提供了一个从用户空间通往内核空间的入口,Linux系统启动时把它挂载到/sys目录,通过访问这个目录下面的文件,可以获得各种的系统内核信息,例如设备、内核模块、文件系统等。sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。

2022-09-09 15:42:35 1810

原创 Linux环境变量配置

无论是在Windows系统,还是在Linux系统,经常都需要配置环境变量。拿交叉编译工具(用于在一个平台上生成另一个平台的可执行文件工具)来举例,通常在嵌入式软件开发中,我们会在PC中进行软件开发,将编译好的软件烧录到目标机中,如果你只是用系统自带的编译器,编译出来的软件是无法在目标机中运行的,所以就需要我们用特定的编译器编译,如果不将交叉编译工具的路径配置到环境变量中,系统是无法找到对应的编译工具进行编译的。

2022-09-08 15:18:30 935

原创 简析linux下Makefile Kconfig .config

简述三者的关系简述三者的关系Makefile:制定工程源文件的编译规则,指定哪些文件的编译,是一个文本文件;Kconfig:制定内核的配置菜单,命令menuconfig进入的菜单选项就是它配置的;:编译内核的具体配置选项;退出配置菜单后,就会根据菜单配置生成一个.config文件;执行编译命令make时就根据.config配置编译。1 Makefile。

2022-09-08 14:43:07 786

低功耗蓝牙(BLE)协议官方文档

低功耗蓝牙(BLE)协议官方英文文档、中文版为英文在线翻译后文档

2022-12-28

C语言实现Windows下音乐播放器

c语言开发,Windows下使用鼠标操作音乐播放器。

2022-12-14

c语言模拟双色球系统开发

适用于学习C语言后,模拟开发一个小项目练手。

2022-12-05

空空如也

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

TA关注的人

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