- 博客(37)
- 收藏
- 关注
原创 单片机刷题错题集
1、单片机内部计数器可实现最大计数值:65536(2的16次方),由单片机内部的16位计数器/定时器决定(51单片机有2个16位计数器T0和T1,每个计数器都是由两个8位寄存器THx和TLx组成)当单片机的振荡晶体频率为12MHz,一个机器周期就等于 1 us(微秒)因为晶体振荡一次叫时钟周期。晶体振荡12次为一个机器周期。一个机器周期 = 12 * 晶体振荡周期(12分频)
2025-12-05 11:49:18
100
原创 【嵌入式Linux应用之——I2C协议应用编程、SMBus协议】
本文介绍了Linux系统下I2C系统的核心结构体及其功能。I2C传输通过I2CController与I2CDevice完成,关键结构体包括:1)i2c.client存储设备地址和所属总线指针;2)i2c.adapter记录控制器编号和传输算法;3)i2c_msg定义数据传输格式,包含缓存区、长度、地址和读写标志。此外还提及SMBus协议,这些结构体共同构成了Linux I2C子系统的基础框架。
2025-11-26 16:31:43
1004
原创 通讯协议(一): I2C协议
摘要:I2C总线采用双线结构(SCL时钟线和SDA数据线),支持多主机多从机通信。协议通过起始/停止信号控制通信流程,主机发送7位地址和读写位选择从机。数据传输以字节为单位,每个字节后需应答信号。协议支持时钟同步机制和总线仲裁功能,确保多主机竞争时数据完整性。硬件上采用漏极开路结构实现线与逻辑,为仲裁和同步提供基础。I2C具有简单布线、地址寻址和冲突检测等特点,广泛应用于电子设备间通信。
2025-11-24 15:43:50
666
原创 韦东山嵌入式入门笔记之——应用开发基础篇(九)多线程编程
本文介绍了Linux系统中线程的基本概念和使用方法,包括线程标识、创建、控制等。主要内容包括:1) 线程的创建与标识;2) 线程同步机制,如信号量和互斥锁;3) 条件变量的使用。通过示例代码演示了如何实现线程间的通信与同步,解决临界资源访问问题。文章还提供了实际编程指导,包括编译选项和系统命令查看线程状态的方法。
2025-11-19 21:49:31
924
原创 韦东山嵌入式入门笔记之——应用开发基础篇(八)网络通信
本文概述了网络通信基础概念,重点介绍TCP和UDP协议的区别。主要内容包括:1)网络通信三要素(源、目的、长度)及IP端口作用;2)服务器(server)和客户端(client)的角色区分;3)网络五层模型简介,强调应用层和运输层的重要性;4)TCP提供可靠传输和流量控制,适合要求数据完整性的场景;5)UDP无连接、低延迟的特点使其更适合实时应用如视频通话。文章通过对比两种协议的特点和应用场景,帮助读者理解网络通信的基本原理。
2025-11-04 16:24:17
832
原创 韦东山嵌入式入门笔记之——应用开发基础篇(七)tslib框架分析
摘要:tslib是一个开源触摸屏访问库,提供触摸数据处理功能。其核心在于plugins目录下的模块,每个模块提供read和read_mt函数分别处理单点和多点触摸数据。
2025-11-03 11:02:59
222
原创 韦东山嵌入式入门笔记之——应用开发基础篇(七)电阻屏和电容屏
摘要:本文介绍了触摸屏的分类和工作原理。文中还通过实验数据展示了单点和多点触摸时的数据上报差异。
2025-10-29 10:29:15
1032
原创 韦东山嵌入式入门笔记之——应用开发基础篇(七)APP访问硬件的方式
本文介绍了APP访问硬件设备的四种方式:1. 查询方式(非阻塞读取);2. 休眠-唤醒方式(阻塞读取);3. POLL/SELECT机制(定时等待);4. 异步通知。重点阐述了poll/select的工作原理和使用方法,包括设置监测文件、事件类型和超时处理。此外还说明了通过ioctl获取设备信息的参数格式和用法,特别是读取输入设备evbit时的request参数设置方法。这些机制为应用程序与硬件交互提供了灵活多样的通信方式选择。
2025-10-27 17:34:35
124
原创 二叉树经典算法完全指南:从遍历到应用
目录二叉树基础知识TreeNode 结构定义int val;// 节点值// 左子树指针// 右子树指针// 构造函数二叉树遍历方式。
2025-10-27 17:32:07
250
原创 韦东山嵌入式入门笔记之——应用开发基础篇(七)输入系统应用编程7.2
本文介绍了Linux输入系统框架及调试方法。输入系统采用分层架构:硬件驱动层获取设备数据,核心层统一数据格式,事件层通过handler处理事件。输入事件用input_event结构体表示,包含type(事件类型)、code(具体事件)和value(事件值)。文章详细解析了鼠标、键盘和触摸屏三类典型输入事件的数据结构,并提供了调试技巧:如何查看设备节点及其对应设备类型、如何读取输入事件的数据。
2025-10-24 14:42:13
590
原创 C语言 fstat 函数
它可以将文件的状态信息(例如文件类型,权限,所有者,大小等)填充到一个 struct stat 结构体中。其中,fd 是需要查询状态的文件的文件描述符,buf 是一个指向 struct stat 的指针,函数将把查询到的文件状态信息填充到这个结构体中。stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。// 文件系统I/O块大小。// 文件类型和权限。// 最后状态改变时间。
2025-09-25 14:18:41
410
原创 图像存储方式:RGB格式
本文介绍了RGB图像格式的存储原理。主要内容包括:1. RGB格式分类(32bpp/24bpp/16bpp)及其存储特点,32/24位采用RGB888格式,16位常用RGB565;2. 物理存储顺序说明,24位RGB888实际以BGR顺序存储,32位为BGRA;3. 寄存器存储的小端序特性对多字节数据的影响;4. RGB888转RGB565的位操作转换方法,通过掩码提取高位并重新组合。文章特别强调了物理存储顺序与寄存器存储顺序的区别,以及不同位深格式间的转换原理。
2025-07-26 12:09:39
961
原创 数据结构——【图】
原创笔记,摘录自B站印度三哥的油管天才程序员的教学视频https://www.bilibili.com/video/BV1Fv4y1f7T1?spm_id_from=333.788.videopod.episodes&vd_source=6622fd4eeb9d549152be3599fb16d8fc&p=42
2025-07-08 16:37:15
371
原创 数据结构——【动态内存】
(1)栈Stack:存储所有函数调用执行的信息和所有局部变量(称为栈帧,栈帧里包括函数的运行状态,还有函数内调用的局部变量,函数一次性调用结束就会清空该部分内存)(2)堆Heap:存放临时数据,存储空间的大小不固定(使用malloc或new函数时会用到)(4)代码段Code(Text):存储所有需要被执行的指令。(3)全局区Global:存放全局变量的部分。
2024-12-16 21:11:03
133
原创 ARM、STM32的相关概念
电源引脚(V开头引脚,包括VDD、VBAT等)、晶振引脚(OSC引脚,分为高速和低速)、复位引脚(NRST)、下载引脚、BOOT引脚(BOOT0,另外如PB2引脚复位后也可做为BOOT1,但只在M3/4中才有)、GPIO引脚。而STM32就属于M3系列内核,其中ST:意法半导体,M:MCU/MPU,32:支持32位的处理器,相关资料可从ST中文社区网下载。纵向是字母,横向是数字,十字交叉格就是管脚,如第一行前两个是A1引脚和A2引脚。⑤是引脚默认功能,⑥是引脚复用功能,其中重定义是通过重映射的复用功能。
2023-05-18 12:10:32
433
原创 蓝牙模块
一 、模块简介嵌入式蓝牙串口通讯模块(简称蓝牙模块)具有两种工作模式:命令响应工作模式和自动连接工作模式。当模块处于命令响应工作模式(或者AT模式)时能才能执行 AT 命令,用户可向模块发送各种 AT指令,为模块设定控制参数或发布控制命令。(AT指令就是我们PC与一些终端设备(例如蓝牙,WiFi模块)之间进行通信的,配置这些终端设备参数的一套指令。)在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事
2021-03-23 21:43:35
4871
原创 电机模块驱动
//初始化TIMX,设置TIMx的ARR,PSC//arr:自动重装载初值,psc为预分频值,两者配合控制定时器时钟的周期//定时器选择TIM1static void TB6612_ADVANCE_TIM1_Mode_Config(TIM_TypeDef* TIMx,uint16_t arr,uint16_t psc,uint16_t duty) { //-----------------时基结构体初始化-------------------------/ TIM_...
2021-03-22 11:14:49
351
原创 超声波避障小车
超声波模块采用HC-SR04超声波模块,该芯片具有较高的集成度以及良好的稳定性,测度距离十分精确,十分稳定。供电电压为DC5V供电电流小于10mA,探测距离为0.010m-3.5m,一共有四个引脚VCC(DC5V)、Triger(发射端)、Echo(接收端)、GND(地)。实物长这样:该模块是利用单片机的IO触发电平测距,过程如下:单片机内部利用普通定时器产生一个高电平信号之后,超声波就可以自主发送8个频率为40khz的方波,然后等待信号的返回;若有信号返回,单片机IO口就立刻输出一高电平,高
2021-03-22 09:48:41
3784
1
原创 HC05蓝牙串口通信模块
HC-05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了。因为HC05模块是一款高性能主从一体蓝牙串口模块,可以不用知道太多蓝牙相关知识就可以很好的上手。说白了,只是个蓝牙转串口的设备,你只要知道串口怎么编程使用,就可以实现了所谓的透明传输(透传)。此文章中用蓝牙模块实现手机蓝牙控制STM32芯片的功能。一、蓝牙模块的调试待完善二、手机蓝牙控制STM32单片机实现功能:手机通过蓝牙,向STM32单片机发送消息,STM32接收到消息之后原封不动的返回给手机。当然如果掌握了这...
2021-03-21 16:34:21
2066
原创 STM32串口通信:USART
一、通信接口背景知识设备之间通信的方式1、一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是:串行通信:数据按位顺序传输。优点:占用引脚资源少,缺点:速度相对较慢。并行通信:数据各个位同时传输。优点:速度快,缺点:占用引脚资源多。串口通信一般是以帧格式传输数据,即一帧一帧传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。2、串行通信的分类(1)按照数据传送方向,分为:单工:数据传输只支持数据在一个方向上传输;半双工:允许数据在两个方向.
2021-03-20 23:09:22
1684
1
原创 韦东山嵌入式入门笔记之——应用开发基础篇(七)
本文介绍了中文字符点阵显示的两个关键问题:编码格式和区位码原理。在编码方面,详细说明了如何在GCC编译器中通过-finput-charset和-fexec-charset参数指定源文件和可执行文件的编码格式(GB2312或UTF-8),并演示了编码转换过程及常见错误。在区位码部分,解释了HZK16字库中通过GB2312编码查找汉字点阵数据的原理,以“中”字为例说明了区码和位码的计算方法,并指出每个区包含94个汉字,区位码从0xa1开始以兼容ASCII码。
2021-02-17 18:24:14
338
1
原创 韦东山嵌入式入门笔记之——应用开发基础篇(六)点阵字符显示
本文介绍了ASCII字符和中文字符在LCD上的点阵显示原理与实现方法。对于ASCII字符,通过8x16点阵数组获取字符数据,根据亮1暗0判断像素状态进行描点显示。中文字符显示则需考虑编码格式(GB2312/UTF-8)转换问题,使用HZK16点阵字库,通过区位码计算字符位置。
2021-02-16 23:08:53
538
1
原创 编码基础——字符编码方式
本文介绍了字符编码的三种主要标准:ASCII、ANSI和UNICODE,以及UNICODE的四种实现方式(UTF-16 LE/BE、UTF-8)。ASCII使用7位表示128个字符;ANSI扩展ASCII,用1-2字节表示字符,但存在地区兼容性问题;UNICODE为全球字符提供统一编码。重点解析了UTF-8的变长编码机制,其通过字节高位标记长度信息,有效解决了字节丢失导致的乱码问题,相比定长编码更具容错性。不同编码方式各具特点,适用于不同场景需求。
2021-02-16 15:21:54
457
1
原创 开发板上的第一个APP和驱动程序
注:开发板以IMX6ULL PRO开发板为例!!!正文一、在开发板上编译程序即使用交叉编译器编译程序1、最重要的是先找到交叉编译的前缀:(1)一种运用自动补全功能:输入 arm- 然后加Tab键,就会出来想要的前缀(2)第二种方法是查看环境变量CROSS_COMPILEbook@100ask:~$ echo $CROSS_COMPILEarm-linux-gnueabihf-2、如果不是交叉编译则会在开发板上报错为格式出错$ arm-linux-gnueabi...
2021-02-02 22:02:17
412
1
原创 编程前的准备
一、连接开发板1、如图所示2、安装 USB 串口模块驱动打开设备管理器查看端口:让 Windows 自动安装,如果电脑没有显示出端口号,就需要手动安装驱动(用驱动精灵)。从驱动精灵官网下载一个驱动精灵,安装、运行、检测,会自动安装上串口驱动。二、连接终端MobaXterm打开串口1、打开 MobaXterm,点击左上角的“Session”,在弹出的界面选中“Serial”,如下图所示选择端口号(前面设备管理器显示的端口号 COM21)、波特率(Speed 115200)、流控(Flow Co
2021-02-01 13:46:18
695
1
原创 韦东山嵌入式入门笔记之——应用开发基础篇(五)Framebuffer应用编程
本文介绍了Framebuffer应用编程原理,重点讲解了如何通过Linux系统控制LCD显示。主要内容包括:1) Framebuffer作为储存帧图像数据的内存,其大小取决于LCD分辨率和颜色深度;2) 显示原理是应用程序填充Framebuffer,LCD控制器循环读取显示;3) 详细说明了像素点位置计算、颜色格式转换方法;4) 提供了关键API函数的使用说明,包括open、ioctl、mmap等;5) 给出了完整的描点函数实现代码,支持8/16/32位颜色格式。最后附上完整的Framebuffer应用编程
2021-02-01 10:21:32
491
1
原创 韦东山嵌入式入门笔记之——应用开发基础篇(四)文件I/O
本文介绍了Linux中的文件I/O基本概念和操作方法。主要内容包括:1) Linux将所有资源都视为文件,通过标准接口访问;2) 文件来源包括硬件设备和虚拟文件系统;3) 两类I/O函数(标准IO和系统调用IO)及其调用流程;4) 文件访问方法(通用I/O模型和特殊方法)和查询帮助命令;5) 系统调用进入内核的机制。
2021-01-31 16:40:08
340
1
原创 GCC编译器的选项
本文介绍了GCC编译器的常用选项及其功能,主要分为预处理、编译、汇编、链接等阶段的控制选项。关键选项包括:-c(生成目标文件)、-S(生成汇编代码)、-E(仅预处理)、-o(指定输出文件名)。此外还涉及警告选项(-Wall)、调试选项(-g)、优化选项(-O0~-O3)以及链接器选项(-l、-static等)。文章还介绍了目录选项(-I、-L)用于指定头文件和库文件的搜索路径,并比较了静态链接与动态链接的区别
2021-01-27 16:43:03
2449
原创 韦东山嵌入式入门笔记之——应用开发基础篇(一)交叉编译与GCC编译器
本文介绍了交叉编译流程及GCC编译器使用要点。主要内容包括:1)交叉编译准备工作;2)gcc与交叉编译器的区别;3)C文件、头文件和库文件的编译路径设置方法;4)GCC编译过程详解(预处理、编译、汇编、链接);5)动态库与静态库,二者的优缺点;6)文章还提供了常用的GCC命令参数及多文件编译方法
2021-01-27 11:23:41
589
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅