自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 Linux驱动学习之PWM

他就是一个总周期不变 占空比可调制的方波!

2024-08-30 14:57:33 1470

原创 Linux驱动学习之input子系统

input子系统框架编写input驱动我们只关心内核层,在内核层注册input子系统,然后进行事件上报就可以了。

2024-08-29 17:25:31 2247

原创 Linux驱动学习之IIC(驱动BH1750)

Linux内核IIC底层驱动,厂家已经写好了,我们需要做的是,修改设备树,调用他的驱动,添加我们设备的信息(在设备树中添加节点),对于初学者来讲,linux驱动学习最重要的不是学习linux内核,而是对设备树的学习(后面会出专题),可以说学会设备树规则,就已经成功了一办,剩下的就是了解API接口。现在设备树匹配方式,当然在这个里面得匹配IIC子节点即我们定义设备的compatible,这注册函数可直接找到IIC节点,并初始化pinctrl(引脚),并且识别我们的设备节点里的七位寻址地址。

2024-08-28 17:53:51 2240

原创 Linux驱动学习之内核poll阻塞

通过前面我们知道,内核驱动中,如果read函数中没有阻塞,上层read就没有阻塞,可是在linux系统编程课中,明明学习的read函数是阻塞的,这里可以大胆的猜测,系统编程实在别人写好的驱动上运行的,他内核驱动内部实现了read的阻塞。补充,上面列子只在poll中实现阻塞,当然也可以自己增加逻辑让在read和epoll中都阻塞,就能实现在系统编程中,多路io复用让夜歌poll监控所有文件描述符,当不用多路io复用,read照样阻塞。当然内核poll阻塞是靠等待队列实现的,所以,要在需要地方唤醒。

2024-08-27 17:39:32 906

原创 Linux驱动学习之内核软件定时器

内核定时器的计数依据内核的一个全局变量 jiffies 计数。加入定时器始终频率100HZ,那就是一秒计100个数,计一个数需要10ms,那吗延时20ms就要传入jiffies+2,总的来说jiffies为当前计数值,在此基础上加上等待时间所需要计数的个数。内核中,软件定时器是一种基于软件的定时机制,用于在预定的时间间隔后执行指定的操作或回调函数。它是一种轻量级的定时器,适用于需要相对较低精度的时间间隔处理。原因之一是为了“车同轨,书同文”,是为了通用!要想在内核中使用软件定时器,首先得用。

2024-08-27 16:52:21 712

原创 Linux驱动学习之中断与等待队列

本篇分为设备树部分和API接口部分。

2024-08-26 20:21:51 1300

原创 IIC总线仲裁机制

总线上可能在某一时刻有两个主控设备要同时向总线发送数据,这种情况叫做总线竞争。

2024-08-25 15:34:40 1396

原创 Linux驱动学习之按键读取

当我们想实现write时,就需要使用,copy_from_user() 从上层获取数据到内核,read 函数的 第二个参数被__user 修饰,原则上在内核层我们不能直接访问,需要调用。copy_to_user()这个函数,从内核获取数据到上层。按键读取我们需要实现read函数,参数2:数据从哪里来。参数2:数据从哪里来。

2024-08-23 17:31:14 592

原创 Linux驱动学习之内核接口和多节点设备

四盏灯:原则上我们想要实现流水灯!需要怎么做?一个驱动生成一个设备文件!一个设备文件怎么控制四个LED灯?你有两种方法:1你写四个驱动 你就能生成四个LED灯!四个驱动有什么特点没除了引脚不一样 其他代码几乎都一样!2你写一个驱动 却生成四个设备文件!

2024-08-23 17:19:11 471

原创 Linux驱动学习之点灯(六,利用平台设备总线)

总线就是使用 match函数来根据注册的设备来查找对应的驱动,或者根据注册的驱动来查找相应的设备,因此每一条总线都必须实现此函数。平台设备总线是内核虚拟的一条总线,早期没有设备树时,通过名字匹配设备信息,如今有设备树通过设备树里的complitable属性匹配,下图是平台设备总线的结构体描述。driver成员,面向对象,device_driver为基类,platform_driver集成了这个基类并添加了一些特有的成员变量。然后在 myprobe里实现 设备注册,在myremove里实现设备卸载。

2024-08-22 19:56:12 657

原创 Linux驱动学习之点灯(五,设备树没用平台设备总线)

of_gpio_named_count 函数用于获取设备树某个属性里面定义了几个 GPIO 信息,要注意的是空的 GPIO 信息也会被统计到。函数原型如下参数一:设备节点参数二:属性名字参数一:设备节点此函数获取 GPIO 编号,因为 Linux 内核中关于 GPIO 的 API 函数都要使用 GPIO 编号,此函数会将设备树中类似 的属性信息转换为对应的 GPIO 编号,此函数在驱动中使用很频繁!参数1:设备节点参数2:属性名。

2024-08-21 20:30:05 589

原创 opencv 绘图

【代码】opencv 绘图。

2024-08-20 18:33:10 393

原创 opencv 视频基本操作

【代码】opencv 视频基本操作。

2024-08-20 18:25:04 188

原创 opencv图像基本操作

key=cv.waitKey(0) #等待ascii==27(esc)的按键按下。gary=cv.cvtColor(img,cv.COLOR_BGR2GRAY) #图片灰度处理。img=cv.imread("./picture/girl.jpg") #加载图片。cv.imshow("girl",img) #展示图片。cv.destroyAllWindows() #销毁窗口。

2024-08-20 18:22:54 310

原创 Linux驱动学习之点灯(四,linux2.6)

下图的函数在linux2.6里是上图函数的升级版,不过他是静态分配,后续还得添加到cdev里。register_chrdev()这个函数一下申请了255个设备号,不建议使用。第一个参数:无符号32位设备号的地址,申请成功后该地址空间里存放的就是设备号。从上图函数不难发现,静态申请多个设备号,主设备号不变,次设备号++第三个参数:申请设备号的数量(主设备号不变,次设备号++)一般我们会使用下图函数动态申请设备号,并添加到cdev里。申请完设备号后,把它加入cdev链表里。第二个参数:次设备号起始地址,

2024-08-20 16:00:05 505

原创 Linux驱动学习之点灯(三)

他就是Linux提供的中间层接口,这是一个真通用的接口之一这个接口就可以在任意的Linux系统下控制GPIO口这个功能有限->只能控制GPIO的两大功能:输入输出。

2024-08-19 20:22:59 401

原创 Linux驱动学习之点灯(二)

杂项,指一类设备,不想分类的设备,所有杂项的主设备号都是0次设备号系统自动分配,杂项开发不用担心设备号的问题。

2024-08-19 19:59:59 212

原创 Linux驱动学习之点灯(一)

学习不同的板子我们都是从点灯开始,linux驱动也不例外。

2024-08-19 19:35:47 794

原创 Linux驱动学习前置知识(了解)及基本框架

内核层运行的程序不同于以往,不在 C 语言+ main 框架,而是 内核层:入口函数 出口函数内核层入口和出口//内核层代码错误有可能直接造成内核死亡 + 系统死亡/*入口函数:*内核层加载的时候入口函数会自动调用*/return 0;/*出口函数*内核卸载的时候,出口函数会自动调用*///往往入口函数用于注册驱动/初始化驱动的//往往出口函数 取消注册,清理驱动,释放空间。

2024-08-19 17:42:58 646

原创 vscode 阅读linux内核(vscode+clangd)

从图中看出,对于make得用bear make生成json文件,所以下面我们就直接下载linux内核源码,配置一下,然后直接bear make就行(对于高版本的bear 则输入bear -- make),用vscode 打开后就可以直接跳转。下载完后可以 clangd --version 查看版本信息,如果能查看,则已经安装成功。这只是客户端,还需下载个服务器(这在coc插件里也有说明)当然,make也要装(不懂make的请先去学make)此插件曾在vim里用过,非常好用。所以就用到了bear。

2024-08-19 15:27:07 1042

原创 温湿度传感器AHT25

• 完全标定• 数字输出,I 2C接口• 优异的长期稳定性• 响应迅速、抗干扰能力强• 宽电压支持2.2-5.5VDC。

2024-08-11 09:30:27 684 1

原创 c/c++成长之路之面向对象 (友元)

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,当然友元也可以是类内的一个方法。友元可以访问类内所有(private)成员和保护(protected)成员。

2024-07-31 10:36:38 307

原创 c/c++成长之路之面向对象(继承)

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为,新建的类称为。

2024-07-30 19:16:19 246

原创 c/c++成长之路之面向对象 二 (构造函数与析构函数)

类的是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。(方便给属性初始化赋值)构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。构造函数分为 有参构造,无参构造,拷贝构造。

2024-07-29 11:59:41 356

原创 C/C++成长之路之面向对象 一(类&对象)

class box{public : //公有属性int l;//长int w;//宽int h;//高box BOX;//声明对象BOX.h=10;//赋值BOX.l=10;BOX.w=10;class box{public : //公有属性int l;//长int w;//宽int h;//高int get()//定义体积计算方法box BOX;//声明对象BOX.h=10;//赋值BOX.l=10;BOX.w=10;计算结果为1000;

2024-07-29 11:05:34 238

原创 C/C++成长之路之引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。结果不难发现,a与b都指向一个地址空间,可以说,b就是a的替身(不是复制);

2024-07-29 10:14:02 376

原创 ESP32连接阿里云(MQTT协议)

本文代码用platform IO编写,这部分代码用到了两个库,WiFi.h 和PubSubClient.h。

2024-07-28 20:08:10 624

原创 ESP32建立TCP客户端连接安信可透传云

我们是基于Arduino框架开发,所以先下载个Arduino IDE,或者是用platfrom IO,本文选择后者,个人感觉platfrom IO比Arduino IDE 好用多了。我用的开发板是ESP32-WROOM-32E,其他的可改变板子类型。删除用户自定义函数,剩下,setup()与loop()函数。增加这一句,把默认波特率改为115200.打开安信可透传云,复制ip 端口。然后打开main.cpp。

2024-07-28 19:54:11 517

原创 CAN总线入门教程

1.CAN总线(Controller Area Network Bus)控制器局域网总线。2.CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域3.CAN总线特征:1.两根通信线(CAN_H、CAN_L),线路少,无需共地2.差分信号通信,抗干扰能力强3.高速CAN(ISO11898):125k~1Mbps,

2024-07-28 11:38:19 2879

原创 SPI协议

spi模式0,与spi模式3,均为上升沿读,下降沿写。(这两种情况在大多数情况下可以互相兼容)同理模式1 2 也一样。

2024-07-26 10:14:29 681

原创 (一文带你玩转CRC)CRC8 CRC16_MODBUS CRC32实现

之前说过了crc计算的基本原理,如有需要请跳转CRC循环冗余校验计算(含c语言实现)通过观察手动计算过程不难发现每次结果最高位为1时都要异或多项式,手动计算时,我们用了最高次幂系数,代码计算时舍去最高次幂系数,所以当判断最高位系数为1时我们都要进行移位操作。手算时crc32后面补32个0,代码时,我们先让八位数据左移24位(让八位数据最变成32位方便异或),在循环中又移八位总共也是32位,等同于加了32个0,依次类推。当计算crc4时,可以把一个8位数据当成两个四位数据来计算,for循环次数也变成4。

2024-07-25 09:57:17 1547

原创 一文让你熟练掌握B_LUX_V22 光照传感器

B_LUX_V22 是一种用于两线式串行总线接口的数字型光强度传感器集成电路。这种集成电路可以根据收集的光线强度数据来调整液晶或者键盘背景灯的亮度。利用它的高分辨率可以探测较大范围的光强度变化。应用范围蔬菜大棚、楼道、仓库、汽车定位系统、气象站、光照度恒光器、移动电话,液晶电视,笔记本电脑,便携式游戏机,数码相机,数码摄像机,液晶显示器,测试及检测设备、数据记录器、自动控制、家电、医疗等应用领域。产品特点1. 支持 I2C BUS 接口(f/s Mode Support)。

2024-07-24 20:04:07 1318 2

原创 CRC循环冗余校验计算(含c语言实现)

使用生成多项式,将K位信息位经运算得到R位校验位,然后将K+R位一起传输给接收方。接收方根据生成多项式和接收到的K+R位数据,校验数据。若正确,取出数据位进行处理;若错误,提醒发送方重传。

2024-07-24 15:15:34 660

原创 lora详解(E32-433T20D)

1.家庭安防报警及远程无钥匙进入2.智能家居以及工业传感器等3.无线报警安全系统4.楼宇自动化解决方案5.无线工业级遥控器6.智能智能农业,油田方案7.医疗保健品8.高级抄表架构9.汽车行业应用。

2024-07-24 10:42:47 2055

原创 8080时序ILI9341(附源码 stm32程序)

模拟8080时序,IO口配置为推挽输出模式。

2024-07-20 14:11:22 915

原创 1.29寸7脚spiOLED屏幕(CH1115)

此屏幕分辨率 128*64,oled屏分八页,一个八位数据(uint8)可控制一竖行八个灯,64/8正好为八页,可看下图理解。* 0 X轴 127。* 纵向8点,高位在下,先从左到右,再从上到下。* 横向向右为X轴,取值范围:0~127。* 纵向向下为Y轴,取值范围:0~63。厂家手册上有初始化代码,只需拿来稍加修改。* 每一个Bit对应一个像素点。* 左上角为(0, 0)点。

2024-07-20 00:31:19 1077

原创 IIC协议(以STM32为例,软件iic,第一部分时序讲解,第二部分代码实现)

(如下图),是一种弱驱动,无法输出高电平,所以在硬件电路上连接了一个4.7k的上拉电阻,当cpu输出高电平时,因为是开漏模式,nmos关闭,此时高电平由外接上拉电阻提供,s代表start 起始信号,在scl高电平期间拉低sda(先拉低sda,再低scl),最后终止信号 : 在scl高电平期间拉高sda(先拉高scl,再拉高sda)起始信号:在scl高电平期间拉低sda(先拉低sda,再低scl),在scl高电平期间拉高sda(先拉高scl,再拉高sda)第二个字节 :为从机寄存器地址, 等待应答,

2024-07-19 11:08:25 1161

空空如也

空空如也

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

TA关注的人

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