自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

欲盖弥彰1314

如有一味绝境,非历十方生死。

  • 博客(226)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 Linux驱动 | OLED显示模块驱动(SPI)

设备树驱动实现测试程序

2022-04-01 21:30:39 2961 1

原创 Linux驱动 | MPU6050 驱动(regmap子系统)

regmap子系统在芯片驱动开发中,基本都是读写操作寄存器。常用到的接口都是如SPI、I2C,对于一些硬件则可能会支持两种接口,对于Linux的SPI、I2C总线,它们读写操作接口是不同,但是针对这些硬件而言无论使用哪种接口它们最终读写寄存器的方式都是一样。针对这种更换接口就要将驱动改动很大的做法在Linux下是不可想象,基于分层分离的思想,代码复用等原则,Linux下引入了regmap模型,将SPI、I2C这些常用接口统一抽象成regmap APISOC内部寄存器也可以使用Regmap

2022-04-01 20:37:41 959

原创 Linux驱动 | MPU6050驱动(I2C)

MPU6050驱动(IIC驱动)

2022-04-01 20:35:39 1470 4

原创 Linux驱动 | AP3216C驱动(I2C)

I2C总线驱动内核缺陷:即使不用id_table也要加上,不然设备树匹配方式of_match_table无法匹配成功

2022-04-01 00:01:18 1976

原创 Linux 驱动 | SPI子系统

SPI子系统

2022-04-01 00:00:04 2128

原创 Linux驱动 | DHT11驱动

DHT11

2022-03-27 07:20:54 2329 5

原创 Linux驱动 | I2C子系统

I2C子系统Linux的总线基本都遵循分层分离原则。I2C子系统框架可以看到I2C子系统也是分层分离。在STM32的I2C驱动中,一般要编写两部分代码,一部分是STM32的I2C控制器代码,一部分跟具体芯片相关的代码。跟I2C控制器驱动的代码一旦写好,后续使用就不用修改Linux中的I2C驱动也是这样做的,抽象出了两部分 : I2C适配器驱动 和 I2C设备驱动I2C适配器驱动是跟芯片控制器相关的驱动,一般是由芯片厂商实现添加进linux内核源码中。而一般工程师要实现的就是I2C设备驱动

2022-03-27 06:37:56 1283

原创 Linux驱动 | DS18B20驱动编程

DS18B20

2022-03-26 22:28:50 1885 2

原创 Linux驱动 | HC-SR04超声波模块驱动

HC-SR04超声波模块

2022-03-26 16:57:06 2730 12

原创 Linux驱动 | HC-SR501红外热释电驱动(中断&内核线程)

HC-SR501红外热释电驱动

2022-03-26 16:42:41 1617 1

原创 Linux驱动 | 按键驱动开发

按键驱动按键驱动和LED驱动是最简单的驱动了,但是从这些最简单的驱动中可以学到不简单的东西,可以学习到Linux设备驱动的框架。Linux驱动 = 框架 + 硬件操作驱动只提供能力,具体需要怎样操作取决于应用程序。1、自定义设备节点方式实现按键驱动2、使用输入子系统框架实现按键驱动...

2022-03-26 11:43:12 1114

原创 linux设备驱动 -- 并发与竞争

Linux设备驱动必须解决的问题:多个进程对共享资源并发访问,并发访问易导致竞态并发:多个执行单元同时、并行执行竞态:并发的执行单元同时访问共享资源(硬件资源和软件上的全局变量等)易导致竞态竞态产生的情况对称多处理器(SMP)的多个CPU核竞态可能发生于CPUx进程和CP3Uy进程、CPUx进程和CPUy的中断之间以及CPUx 中断和CPUy的中断之间单CPU内进程被高优先级进程打断高优先级的进程也要访问共享资源,这就易导致竞态中断

2022-03-25 20:31:06 439

原创 Linux设备驱动--input输入子系统

常见输入设备:按键、键盘、触摸屏、鼠标 等。典型的字符设备驱动。内核中一个通用的按键驱动:drivers/input/keyboard/gpio_keys.c基于input架构实现了一个通用的GPIO按键驱动用户空间接口/dev/input/event0/1/2/…/dev/input/mouse0/1/2/…/dev/input/sj0/1/2/……输入子系统框架—— 《linux设备驱动开发详解》分层模型核心层创建input设备类根据输入设备种类、分发事件到不同事件

2022-03-25 19:32:49 795

原创 Linux驱动 | LED驱动(使用PWM子系统)

Linux驱动 | LED驱动(使用PWM子系统)1、PWM子系统PWM子系统用于管理PWM波的输出。PWM子系统一般是由芯片厂商实现默认编译进内核。PWM子系统在内核

2022-03-25 19:30:14 2226

原创 Linux设备驱动 | LED字符设备驱动(设备树)

LED字符设备驱动(设备树)实验1、设备树的改动1.1 修改设备增加led节点内核源码设备树文件位置:ebf-buster-linux/arch/arm/boot/dts/imx6ull-seeed-npi.dts添加如下节点: red_led { #address-cells = <1>; #size-cells = <1>; compatible = "red_led";

2022-03-25 19:29:19 762

原创 Linux设备驱动 | LED字符设备驱动(platform平台总线)

platform平台总线实现LED字符设备驱动参考内核中存在的字符设备驱动进行编写,如misc.c这个经典的字符设备驱动。LED字符设备驱动平台设备实现1、查看手册获取相关寄存器#define CCM_CCGR1 0x20C406C#define MUX_PAD_GPIO1_IO04 0x20E006C#define GPIO1_DR 0x209C000#define GPIO1_GDIR 0

2022-03-25 19:25:51 1748

原创 Linux设备驱动 | LED字符设备驱动实验

Linux字符设备驱动Linux实现了一套字符设备驱动框架,编写字符设备驱动就按照框架进行编写。字符设备驱动结构框图:图片来自 – 《Linux设备驱动开发详解》最很重要的就是实现struct file_operations该结构中的函数。struct file_operations 结构体定义了字符设备驱动提供给虚拟文件系统的接口函数struct file_operations结构体定义:struct file_operations { struct module *owner; lo

2022-03-25 19:24:33 667

原创 Linux设备驱动--pinctrl子系统和gpio子系统

gpio和pinctrl的内核使用文档gpio子系统\Documentation\devicetree\bindings\gpio\gpio.txtpinctrl子系统\Documentation\devicetree\bindings\pinctrl\pinctrl-bindings.txtpinctrl子系统Linux中将芯片引脚的复用、配置抽出来,汇总了所有引脚的配置信息,做成pinctrl子系统给其他外设使用,而不用使用一个外设就要去查找寄存器一个一个配置。imx6ull

2022-03-25 19:23:30 943

原创 ARM Linux设备树

1、设备树在过去的ARM Linux源码中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,很多代码只是在描述板级设备硬件细节,而这些代码对内核来说就是垃圾由此引出了设备树。DTS(设备树)描述板级设备,起源自OpenFimware(OF)——图片来自野火Linux笔记设备树的中节点会转化为linux中device,会代替平台驱动中的device和平台驱动进行匹配。设备树文件也可以包含引用C语言的头文件2、设备树编译2.1 通过内核编

2022-03-25 19:22:11 804

原创 Linux轮询操作--多路复用IO

应用层提供的轮询(多路复用IO)的接口有三个,分别是poll、select、epoll,这三个函数对应了驱动file_operations结构体中的函数成员:__poll_t (*poll) (struct file *, struct poll_table_struct *);select函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)

2022-03-24 20:49:27 242

原创 Linux设备驱动轮询操作--多路复用IO

应用程序中的轮询编程(多路复用IO)应用层提供的轮询(多路复用IO)的接口有三个,分别是poll、select、epoll,这三个函数对应了驱动file_operations结构体中的函数成员:__poll_t (*poll) (struct file *, struct poll_table_struct *);poll函数的典型模板;static unsigned int xxx_poll(struct file *filp, poll_table *wait){ unsigned

2022-03-24 20:48:03 1034

原创 Linux设备驱动--异步通知

Linux的异步通知是使用信号实现的。信号:是在软甲层上对中断机制的一种模拟。设备就绪,驱动会主动通知应用程序Linux中的信号:—— 《linux设备驱动开发详解》异步通知相关数据结构struct fasync_struct { spinlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next;

2022-03-24 20:45:22 1627

原创 Linux内核定时器

Linux内核可选的配置系统频率100HZ200HZ250HZ300HZ500HZ1000HZ默认情况下选择的是100HZ。对应**.config**配置文件的内容:CONFIG_HZ_100=yCONFIG_HZ=100对应到内核源码include/arm-generic中的配置:#ifndef __ASM_GENERIC_PARAM_H#define __ASM_GENERIC_PARAM_H#include <uapi/asm-generic/param.h&

2022-03-24 20:10:41 483

原创 Linux---platform虚拟平台总线

platform虚拟平台总线1、平台总线的注册/driver/base/platform.c中实现struct bus_type platform_bus_type = { .name = "platform", .dev_groups = platform_dev_groups, .match = platform_match, .uevent = platform_uevent, .dma_configure = platform_dma_configure, .pm = &a

2022-03-24 19:36:10 340

原创 使用printf进行协议调试注意事项

使用printf进行协议调试注意事项在调试协议时,使用prinf打印串口接收的数据,在使用printf调试中犯了个低级的错误数据不能这样打印:printf("%s\r\n", );这是因为printf()打印字符串时,遇到’\0’ 就会停止打印,而协议的可能存在字节为0的数据,遇到0时就停止打印会造成打印数据不全,从而误以为接收的数据不对。准确的打印的方式: for(int i = 0 ; i< msg.size; i++) printf("%02x ", msg.buf[i])

2022-02-18 20:04:03 310

原创 sprintf格式化程序异常退出问题

使用sprintf格式化程序异常static char logfileBuf[1024] = {0};sprintf(logfileBuf, "<%d ms>[%s:%d %s] %s", time, __FILE__, __LINE__, __FUNCTION__, buf);直接格式化输出到logfileBuf程序异常退出开始以为会不会是logfileBuf缓冲区太小导致的,增大后依然异常退出调试才找到解决办法 char fileBuf[512] = {0}; char

2022-02-11 19:46:40 593 2

原创 AT24C02 | WriteCycleTiming延时过短导致的读写异常问题

时序具体时间表写周期时序:从该图中可以看到在上一次Stop信号和开始信号之间需要一个时延twr从时序具体时间表可以看你出twr大小为5ms给驱动增加多字节读写1、连续多字节读写int AT24CXX_Write_Page(uint16_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite){ uint8_t i; IIC_Start(); IIC_Send_Byte(0XA0); /* 发送器件地址0XA0,写数据

2022-01-25 13:39:21 2869

原创 Keil STM32 不包含头文件或声明函数直接调用函数导致的异常问题

问题调用函数GetAmbientTemperature()获取返回值打印出来的很大的异常数字打印结果:解决参考:关于Keil5调用函数不包含对应头函数问题总结导致问题原因就是:没有包含对应函数头文件,编译虽然不会报错,但是读不到函数返回值。要老老实实包含头文件或者声明了函数再调用函数,,,...

2021-11-27 13:16:12 1624 3

原创 C 语言获取当前位置

当前位置接口:http://ip.ws.126.net/ipquery代码:#define GET_CITY_IP "59.111.181.52"#define GET_CITY_IP_REQUEST "GET http://ip.ws.126.net/ipquery\r\n\r\n"static int socketfd = -1;static struct sockaddr_in server_addr;int main(int argc, char **argv){

2021-10-29 23:48:48 783

原创 lvgl - lv_lib_png使用

lv_lib_png该库可能是lvglv8时才有,所以一些结构体类型定义和v7上是不同。由于使用的是v7,故需要做一些简单修改才能使用。主要是修改:将_lv_img_decoder_t 改成修改成_lv_img_decoder :测试:初始化png库: lv_png_init();使用:void lv_png_lib_test(void){ lv_obj_t* img = lv_img_create(lv_scr_act(), NULL); lv_img_set_sr

2021-10-25 15:34:30 1071 6

原创 Dahlin控制算法实现

参考 :https://blog.csdn.net/yin_bu_feng/article/details/85871595大林控制算法:#ifndef _DALIN_CONTROLLER_H_#define _DALIN_CONTROLLER_H_#ifndef __API__#define __API__#endif#ifndef __STATIC_INLINE__ #define __STATIC_INLINE__ static inline#endifstruct Da

2021-07-30 18:43:58 674

原创 关于STM32 double类型数据计算

double PresetFlow2PVavleDuty(float presetflow){ double n[8] = { 49.2335778711886, // a 0 55.9585083556069, // b 1 -13.5915770179714, // c 2 1.54143446997669, // d 3 -0.0897576896073748,...

2021-07-30 18:43:16 3080

原创 关于曲线拟合

最近由于需要,要对数据进行曲线拟合,知道matlab可以,但安装包太大以及不会用;用python也可以吧,但不方便,所以就用excel来拟合。在将拟合公司用于实测计算的时候发现,计算结果错得离晒谱。兜兜转换,发现是拟合多项前面系数精度的问题导致的。果然还是不能用excel进行重要数据的拟合。在网上找了一个在线拟合工具,拟合出来的多项式方程,完美计算出了结果可以看到算出的每一项的多项式的精度比excel好太多了。用这个工具curvefitter也可以。...

2021-07-28 18:35:31 216

原创 STM32 编译错误记录\ARMCC\Bin\..\include\stdio.h(352): error: #20: identifier “size_t“ is undefine....

前一次编译还没有错误,做了一些改动后就编译出错。以前还出现过很多次类似的情况。 void Delay_Init(void);C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h(352): error: #20: identifier "size_t" is undefined int /*mode*/, size_t /*size*/) __attribute__((__nonnull__(1)));C:\Keil_v

2021-07-20 14:55:49 4040 9

原创 修改lvgl Linux demo使用tslib获取触摸坐标

1、为什么要修改/(ㄒoㄒ)/~~交叉编译官方lvgl linux demo发现触摸坐标不准确。官方demo获取坐标的做法是:evdev_fd = open(EVDEV_NAME, O_RDWR | O_NOCTTY | O_NDELAY);if(evdev_fd == -1) { perror("unable open evdev interface:"); return;}fcntl(evdev_fd, F_SETFL, O_ASYNC | O_NONBLOCK);while

2021-05-26 23:39:43 2832 7

原创 sudo make install安装交叉编译库错误解决

交叉编译过很多个库,经常出现sudo make install 安装时出现提示arm-linux-gnueabihf-xxx command not found以交叉编译tslib库为例sudo make install 出现以下错误:/local/tslib/etc/pointercal\" -DTSLIB_INTERNAL -fvisibility=hidden -DGCC_HASCLASSVISIBILITY -O2 -Wall -W -fPIC -module -avoid-version -

2021-05-06 23:10:06 1682

原创 emWin的Button控件的单击、双击、长按等识别

emWin的button按钮控件只有按下和弹起两种消息,想识别emWin的双击、长按等还不得不另寻他法。突然想到emWin的button和物理机械按钮有什么不同呢?MulitiButton库应该可以用,try to do it.MulitiButton仓库地址:GIthub地址:https://github.com/0x1abin/MultiButton使用起来和物理机械按键一样1、定义button对象static struct Button g_PressureUp; //static s

2021-04-21 13:40:43 1361

原创 记一个枚举变量引起的#if条件编译问题

#if 条件编译还是用得少,最近编写测试代码发现一个以前不知道的问题。代码1:enum { TEST_A = 0, TEST_B = 1, TEST_C = 2,}; #define TEST TEST_Bint main(){#if (TEST == TEST_A) printf("test A\r\n");#elif (TEST == TEST_B) printf("test B\r\n");#elif (TEST == TEST_C

2021-04-08 17:59:36 442

原创 MQTT协议软件包moquitto C语言编程使用

mosquitto-2.0.9安装:https://blog.csdn.net/qq_36413982/article/details/115184473mosquitto的API文档:/home/roger/src/mqtt/mosquitto/lib/mosquitto.hhttps://mosquitto.org/api/files/mosquitto-h.html#mosquitto_loop_forevermosquitto的API简单易用,基于回调函数编程。订阅者mosquitto_su

2021-03-25 13:06:33 752

原创 CMake构建mosquitto应用程序失败 - /usr/bin/ld: cannot find -lmosquitto

CMakeLists.txt:cmake_minimum_required (VERSION 2.8)project(mosquitto_pub)include_directories("usr/include/") #设置头文件路径link_directories("/usr/lib/") #设置库路径aux_source_directory(. DIR_SRCS)add_executable(mosquitto_pub

2021-03-24 18:54:59 877

LT8912B MIPI转HDMI/LVDS芯片手册

LT8912B MIPI转HDMI/LVDS芯片手册

2024-02-06

鸿蒙hdc工具和使用笔记

鸿蒙hdc工具和使用笔记,从鸿蒙系统开发环境中提取出来的独立的hdc工具以及使用笔记

2024-01-08

鸿蒙系统hdc工具的使用

鸿蒙系统hdc工具的使用

2023-12-22

打包好的SimpleGUI单色点阵取模工具,不需要自己编译源码

SimplePixelTools: 单色点阵取模工具 https://gitee.com/Polarix/SimplePixelTools SimplePixelTools设计为一款针对单色显示屏的文字字模转换工具。   该软件作为SimpleGUI生态中的一个辅助工具,也可独立使用。

2023-07-11

SimpleGUI精简字库的工具MinimumFontLib

SimpleGUI重编码精简字库的工具,在作者gitee上编译好的exe文件不能直接执行,缺少很多动态库,这个已经将这些库都打包好成这个执行文件,可以直接执行 MinimumFontLib: 一个用于精简单色点阵字库数据的工具 https://gitee.com/Polarix/MinimumFontLib 当然你也可以直接下载它的源码编译,就是比较麻烦

2023-07-08

基于事件的单片机程序

简单易用,支持IAR、MDK 1、编写好事件函数 void event(void) { printf("500ms \r\n"); } 2、调用EVENT_EXPORT(event,ONCE_EVENT,event);注册事件 event 事件名字 ONCE_EVENT 事件类型 event 事件处理函数 3、main函数while循环中调用void event_handle_loop(void) 4、产生事件调用函数void post_event(event) event 事件名字

2020-03-01

Win32API函数参考手册.zip

很好的WindowsAPI函数参考手册参考手册,详细介绍了每一个win32 API的使用。要windwos编程?这本书你值得拥有

2019-06-27

串口上位机波形.rar

好用的串口上位机波形,调试传感器数据利器。内有函数库,串口连接电脑,调用函数库函数发送电脑即可使用

2019-06-14

Linux环境编程图文指南.rar

好书推荐,入门学习linux系统编程的好书,有书籍和书中例程代码

2019-06-12

STM32_BootLoader工程及APP工程.zip

STM32_BootLoader工程及APP工程,可以根据需要稍微修改即可使用。

2019-06-12

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

TA关注的人

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