- 博客(20)
- 收藏
- 关注
原创 SR501驱动代码
可以查看一下设备树中其他节点是如何写的(100ask_imx6ull-14x14.dts)先简单的写一个sr501设备节点关于如何设置gpio属性,可以通过grep来查找。
2026-10-14 23:37:08
20
原创 Linux——设备树
在 Linux 内核源码的ARM 体系结构 引入设备树之前,相关的 BSP 代码中充斥了大量的平台设备(Platform Device) 代码,而这些代码大多都是重复的、杂乱的。之前的内核移植工作有很大一部分工作就是在复制一份 BSP 代码,并修改BSP 代码中和目标板中与特定硬件相关的平台设备信息。这使得ARM 体系结构的代码维护者和内核维护者在发布一个新版本内核的一段时间内有大量的工作要做。
2026-09-28 10:06:39
243
原创 总线设备驱动模型
当我们在编写驱动程序时,对于类似的硬件,比如LED灯,当我们变更引脚的时候,都需要修改对应的驱动程序。很明显这是很麻烦的。类比单片机的HAL库,对于GPIO的操作,HAL统一传入GPIO引脚的信息,从而增加代码的复用性。对于驱动程序,我们可以分为platform_driver和platform_device两部分,
2026-09-22 21:38:38
78
原创 简单的驱动程序的编写
对于步进电机,其内部的转子有6个齿,外圈的定子则有6个齿,当我们导通B时,3号会对准B。而此时2号和A会有一个夹角,因此当我们截断B并导通A时,2号会对准A,此时转子发生旋转,旋转角度为 15°(转子6个齿,所以相邻的两个之间夹角为60°,定子有8个齿,所以夹角为45°)。如果想要进行测距的话,我们需要先通过trigger来发送一个10us的高电平,然后再echo端口获得对应的一个时间为T的高电平,我们可以根据高电平的持续时间T来计算对应的距离。度,这个值就叫做步进角度。
2026-09-12 21:47:12
132
原创 Linux网络编程
所有的数据传输,都有三个要素 :源、目的、长度。在网络传输中要使用“IP 和端口”来表示源或目的。在网络传输过程中,主动发起数据请求的为client客户端,响应请求的则是server服务器端。
2026-09-08 22:47:06
184
原创 输入系统应用编程
输入设备繁多,Linux 系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的 API 去使用设备。其框架如下图所示当用户操作设备时,硬件上产生中断,输入系统驱动层对应的驱动程序处理中断:读取到数据,转换为标准的,向核心层汇报。(其中的输入事件为struct input_event结构体)。然后核心层会决定将输入事件转发给上面的哪个handler来进行处理。输入设备的表示那么内核该如何表示一个输入设备呢?
2026-09-08 20:23:17
188
原创 GCC与Makefile
一个 C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等 4 步才能变成可执行文件。
2026-09-07 09:35:54
164
原创 基于FreeRTOS的温湿度监测系统的改进
产生溢出错误:当USART接收器在接收缓冲区(RDR寄存器)已有未读取数据的情况下,又接收到新的数据时产生的错误。因此如果没能重写错误回调函数,可能会导致usart串口关闭。因此需要在错误回调函数中手动恢复。
2026-09-04 00:01:48
164
原创 基于FreeRTOS的温湿度监测系统
文在基础上移植了FreeRTOS操作系统,相比于裸机,系统通过任务隔离与优先级调度、阻塞式同步与互斥、可靠的任务间通信和更好的可观测性,显著提升了实时性、稳定性与可扩展性。
2026-09-02 23:27:56
233
原创 RTOS中的任务通知
之前我们使用队列、信号量、事件组等方法来控制任务,在这个过程当中我们都需要实现创建对应的结构体,双方通过结构体来进行交流。同时,我们还可以使用任务通知的方式,来进行控制。更节省内存:使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构。
2026-08-31 09:47:09
162
原创 基于信号量的小汽车游戏
在RTOS中,信号量包含两种类型:二进制信号量和计数型信号量,其中二进制信号量被创建时初始值为0,而计数型则是可以设定。可以设计三个小汽车去争抢两个信号量,抢到信号量的汽车先出发,然后到达终点释放信号量。定义小汽车结构体,方便使用,同时定义对应的结构体数组,方便后续使用。可以使用下面的函数删除信号量。
2026-08-30 00:10:45
30
原创 ROTS的事件组
事件组:事件组可以简单地认为就是一个整数,其中的每一位表示一个事件,每个事件的含义可以自己决定。当对应位为1时,表示该事件发生;为0,则表示未发生,可以等待某一位或某些位中的任意一个。事件组用一个整数来表示,其中的高8位留给内核使用,只能用其他的位来表示事件。比如,如果configUSE_16_BIT_TICKS是1,那么这个整数就是16位的,低8位用来表示事件。
2026-08-30 00:10:17
151
原创 I2C的应用——连接OLED屏
STM32F103C8T6有两个I2C资源,分别是I2C1、I2C2,其中I2C1的默认引脚是PB6(SCL),PB7(SDA),开启重映射后是PB8(SCL),PB9(SDA),I2C2的默认引脚是PB10(SCL),PB11(SDA),无重映射引脚,因为要实现逻辑线与的功能,所有引脚的模式都设置为复用开漏输出。
2026-08-29 15:51:33
197
原创 I2C简介
I2C(Inter -Integrated Circuit,集成电路间总线)是由 Philips(现 NXP)开发的 短距离、同步串行通信总线,核心特点是 仅需 2 根线(SDA 数据线 + SCL 时钟线) 即可实现多设备间通信,广泛应用于嵌入式系统(如 STM32 与传感器、EEPROM、LCD 模块的连接)同步数据传输:主机通过 SCL 产生固定频率的时钟脉冲,从机根据时钟的高低电平变化,同步采样 / 发送 SDA线上的数据(避免数据传输错位)
2026-08-29 08:17:42
304
原创 单片机通信协议--USART(串口通信)
因此我们先判断是否发生中断,然后接收数据,并判断接受是否完成,如果完成则不对接收到的数据进行处理,否则,判断是否是回车+换行,即判断之前是否收到了0x0d,再判断当前的是否是0x0a。在没有通信时,默认为高电平,在进入起始位后电平转换为低电平表示开始发送数据,数据呈现出8个字节一位的特性,进入最后一位后低电平转化为高电平,方便下一次数据的发送。简单讲解一下中断处理函数,在这里我们使用USART_RX_STA来表示状态,第15位表示是否接收完成,14位表示接收到了0x0d,后面的几位表示接受数据的长度。
2026-08-28 10:46:10
288
原创 GPIO的介绍与简单使用
在 STM32 开发中,GPIO(General-Purpose Input/Output,通用输入输出)是最基础且常用的外设,用于控制 LED、按键、传感器等外部设备。
2026-08-27 21:50:04
207
原创 STM32入门简介
STM32 是意法半导体(STMicroelectronics)推出的一系列基于的 32 位微控制器(MCU),广泛应用于嵌入式系统开发,是目前业界最流行的单片机系列之一。
2026-08-27 20:22:06
470
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅