- 博客(40)
- 收藏
- 关注
原创 嵌入式Linux驱动开发基础-4 总线驱动设备
和platform_driver.driver.name platform_driver.id_table 可能为空, 这时可以根据 platform_driver.driver.name来寻找同名的。
2025-06-25 16:05:22
678
原创 嵌入式Linux驱动开发基础-3 LED驱动框架
驱动层访问硬件外设寄存器依靠的是 ioremap函数去映射到寄存器地址,然后开始控制寄存器。1.2如何编写驱动程序。
2025-06-25 10:37:03
1040
原创 嵌入式Linux驱动开发基础-2 LED驱动
设置CCM_CCGRx寄存器中某位使能对应的GPIO模块//默认是使能 的,设置IOMUX来选择引脚用于GPIO设置GPIOx_GDIR中某位为0,把该引脚设置为输入功能读GPIOx_DR或GPIOx_PSR得到某位的值(读GPIOx_DR返回的是 GPIOx_PSR 的值)
2025-06-24 14:41:29
972
原创 嵌入式Linux驱动开发基础-1 hello驱动
APP 打开文件时,可以得到一个整数,这个整数被称为文件句柄。对于APP 的每一个文件句柄,在内核里面都有一个“struct file”与之对应当我们使用 open打开文件时,传入的flagsmode等参数会被记 录在内核中对应的 struct file结构体里(f_flagsf_mode)例如: fd = open(argv[1], O_RDWR);读写文件时,文件的当前偏移地址也会保存在 struct file结构体的 f_pos 成员里。
2025-06-24 11:36:51
1053
原创 嵌入式Linux应用开发基础-5 触摸屏
/遍历当前读取到的所有 slot(多点触控的手指槽),如果该 slot 上的采样数据有效,就将该采样数据拷贝到之前保存的采样数组。(触摸屏抽象处理库)中定义的结构体,包含了触摸设备的文件描述符、缓冲区、校准参数等。//计算当前触摸设备支持的最大触控点数量(即多点触控的最大 slot 数),统计并记录当前有效且处于按下状态的触控点(slot)的索引,存入。中的模块 来处理数据的。//初始化触摸屏设备,使用默认设备文件或配置。前者用于读取单点触摸屏的数据,后者用于读取多点触摸屏的数据。
2025-06-23 16:41:55
758
原创 嵌入式Linux应用开发基础-4 输入系统编程
框架概述1:什么是输入设备常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与Linux系统进行数据交换。什么是输入系统?输入设备种类繁多,能否统一它们的接口?既在驱动层面统一,也在应用程序层面统一?可以的。Linux系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的API去使用设备。框架概述假设用户程序直接访问设备节点,或者使用tslib。
2025-06-23 15:46:27
1112
原创 嵌入式Linux应用开发基础-3 LCD 中文字符显示
以及 字符函数为8*16 而中文字符为16*16的区别。显示汉字函数:他与显示字符函数最大区别在于 寻找所显示的字符 在 库中的位置。编码值来查找点阵的,以“中”字为例,它的编码 值是“0xd6 0xd0。表示“位码”,表示它是这个区里的哪一个字符:第 “0xd0 -0xa1。所以,我们要显示的“中”字,它的GB2312。* 功能描述: 在LCD指定位置上显示一个16*16的汉字。里第“(0xd6-0xa1)*94+(0xd0-0xa1)
2025-06-23 11:29:09
676
原创 嵌入式Linux应用开发基础-2 LCD描点和显示文字
访问模式:O_RDONLY:只读打开文件。O_WRONLY:只写打开文件。O_RDWR:读写方式打开文件。文件状态标志:O_CREAT:如果文件不存在,则创建新文件。O_EXCL:与 O_CREAT 一起使用时,如果文件已存在,则返回错误。这避免了文件被意外覆盖。O_TRUNC:如果文件存在并且以写模式打开,则将其长度截断为0。O_APPEND:以追加模式打开文件,写操作将从文件末尾开始。O_NONBLOCK:以非阻塞模式打开文件,尤其对设备文件和管道有用。
2025-06-23 10:53:52
1018
原创 嵌入式Linux应用开发基础-1
访问模式:O_RDONLY:只读打开文件。O_WRONLY:只写打开文件。O_RDWR:读写方式打开文件。文件状态标志:O_CREAT:如果文件不存在,则创建新文件。O_EXCL:与 O_CREAT 一起使用时,如果文件已存在,则返回错误。这避免了文件被意外覆盖。O_TRUNC:如果文件存在并且以写模式打开,则将其长度截断为0。O_APPEND:以追加模式打开文件,写操作将从文件末尾开始。O_NONBLOCK:以非阻塞模式打开文件,尤其对设备文件和管道有用。
2025-06-23 10:17:57
786
原创 关键字static\extern
1.什么定义:定义是给变量或函数分配内存空间,在这同时可以为变量赋初值。2.什么是声明:声明是用来告诉编译器变量的名称和类型,使编译器知道存在着这个变量和类型,且不分配内存。3.结论由此我们可以得出以下两种结论:1.定义会对变量分配内存空间,而声明不会2.由于一个变量的存储空间是唯一的,因此定义不能重复定义,而声明可以重复声明。
2025-06-06 09:32:10
961
原创 结构体指针与非指针 问题及解决
项目使用结构体指针不使用结构体指针(结构体数组)内存管理需自己分配、释放(可能内存泄漏)编译期静态分配,自动管理数据共享可在多个模块间共享同一结构体是拷贝副本,无法共享拷贝开销拷贝指针,开销小拷贝整个结构体,开销可能更大安全性易出错(空指针、悬空指针)更安全,逻辑更直观灵活性灵活,可实现动态注册、释放等功能结构固定,适合数据量已知、场景简单。
2025-06-05 22:38:04
686
原创 LINUX_LCD编程 TFT LCD
一帧数据由多行组成,一行数据由多个像素点组成,每个像素由若干个数据位组成。对于单色显示器,每个像素为1位,称为1bpp,对于256色显示器,每个像素为8位,为8bpp。显示是从左上方开始,一行一行的将每个像素的颜色显示出来,当一行显示数据到最右边是,自动跳至下一列最左边开始执行,当数据至右下角时,调至左上方显示下一帧数据。该图结合下面时序图一起理解LCD时序图其中,VSYNC表示每一帧数据的开始,HSYNC表示每一行数据的开始,VCLK表示传输一个像素的数据。
2025-06-04 16:06:19
900
原创 STM32的BootLoader代码跳转原理
在下面启动文件的向量表中,我们可以可以看到,当系统启动时,第一块访问的地址为__initial_sp,那么在跳转至A区之后,我们首先要做的就是让SP默认值为0x0800A000.在这里SP的大小我们是不知道的,因为这是程序所定义的,但是这个初始值是必须要为A区起始地址处的值,即 *A区起始地址。在Bootoader中,我们将0X08000000作为B区起始地址,将0X0800A000作为A区起始地址,B区负责监测是否需要更新A区程序,若不更新程序,则跳转至A区代码进行运行。然后返回继续执行C代码。
2025-04-26 21:59:19
1435
1
原创 STM32OT固件升级(0)
1:当不存在OTA事件时:运行板子当前程序。2:当存在OTA事件时,对程序进行更新。流程分析:首先需要将STM32的flash分为BA两个区域。B区为bootloader程序。A区域为应用程序。
2025-04-23 09:56:13
456
原创 STM32OTA固件升级(六)xmodem协议
XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。其实就是一种传输协议,对你要传输的文件进行分包,通过串口、SPI、I2C、USB、BLE(低功耗蓝牙协议)、WIFI等各种各样的方式进行传输文件。经过多年的更新迭代,Xmodem衍生出了一下几种系列协议:Xmodem-1kXmodem-CRCYmodemXmodem-1kXmodem-1k。
2025-04-14 17:00:33
1000
原创 STM32OTA固件升级(五)
定义一个uint32_t BootStaFlag;他的每一位发生变化,都会导致相应事件的发生。当 BootStaFlag |= UpData_A_Flag;时,代表着更新A区事件的发生,并在main.c中执行相应操作//更新A区//OTA_Info.FireLen[]的每一位代表着一个更新的函数的大小, 比如【1】是电灯函数10KB【2】是串口。。。
2025-04-14 17:00:20
1928
原创 STM32OTA固件升级(四)读写内部Flash
在 STM32 芯片内部有一个 FLASH 存储器,它主要用于存储代码,我们在电脑上编写好应用程序 后,使用下载器把编译后的代码文件烧录到该内部 FLASH 中,由于 FLASH 存储器的内容在掉电 后不会丢失,芯片重新上电复位后,内核可从内部 FLASH 中加载代码并运行。
2025-04-14 16:59:48
886
原创 STM32OTA固件升级(一)UART
1)下面两个函数可以实现使用C库的printf和scanf函数,来实现数据的收发///重定向c库函数printf到串口,重定向后可使用printf函数/* 发送一个字节数据到串口 *//* 等待发送完毕 *////重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数/* 等待串口输入数据 */2)下面函数可以实现使用我们自己的u1_printf函数来模拟使用C库的printf函数,二者用法相同uint16_t i;
2025-04-14 16:59:38
1089
原创 STM32OTA固件升级(三)SPI读写外部存储W25Q64
*** @brief 对FLASH写入数据,调用本函数写入数据前需要先擦除扇区* @param pBuffer,要写入数据的指针* @param WriteAddr,写入地址* @param NumByteToWrite,写入数据长度* @retval 无*//*mod运算求余,若writeAddr是SPI_FLASH_PageSize整数倍,运算结果Addr值为0*/
2025-04-14 16:59:00
1137
原创 LINUX时钟-S3C2440
由以上可知,我们先想要设置FCLK:HCLK:PCLK = 400M:100M:50M = 8:2:1,需要对MPLL(LOCKTIME),CLKDIVN,MPLLCON三个寄存器进行操作。例如:设置MPLLCON寄存器,我们设置MPLL,使得FCLK:HCLK:PCLK = 400M:100M:50M = 8:2:1,有表可知,MDIV=92,PDIV=1,SDIV=1.* 则FCLK = 2*M*Fin/(P*2^S) = 2*100*12/(3*2^0) = 400M。
2023-07-30 20:44:48
332
1
原创 LINUX按键控制LED
由原理图可知,当按键按下时,IO口为低电平,判断按键是否按下,则需要我们对按键所在的IO口进行高低电平的检测,如果为低电平,则表示按键按下。而三个按键EINT0与GPF0相连,EINT2与GPF2相连,EINT11与GPG3相连,所以我们只需要对这三个引脚进行初始化即可。由LINUX点亮LED可知,LED的点亮可以说是IO口进行输出,那么对于按键来说,便是对IO口输入功能的配置。链接:https://pan.baidu.com/s/1lNElpsQEtmNIeUbdVm5pDQ。
2023-07-28 15:38:53
479
1
原创 关于中断标志位清零
今天在使用中断设置按键单双击用法时,第一次编程如下void KEY2_IRQHandler(void){ int a=0; //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) { key_2++; //检测key1按键 是否松开 while(GPIO_ReadInputDataBit(KEY2_INT_GPIO_PORT,KEY1_INT_GPIO_PIN) == 1); whi
2022-01-03 21:19:00
6084
原创 Linux文件搜索命令
(在Linux中,以#开始的行,都是配置文件的注释行)1)find文件搜索2)locate在文件库中搜索3)which查找一个文件所在的目录,别名4)grep对文本文件内容进行搜索 文件搜索命令 find 从指定目录向下递归地遍历各个子目录,将满足条件的目录或文件显示在终端1)按名字查找find /etc -name init只会搜索init的内容f...
2021-11-29 21:50:59
1124
原创 Linux文件管理命令
命令格式 命令 【-选项】【参数】 例如:ls -la /etc 注:个别命令不遵循此 当有多个选项时,可以写在一起 简化选项与完整选项 -a == --all1)pwd显示当前目录的绝对路径2)cd切换目录3)ls 显示目录文件4)mkdir新建一个目录 touch新建一个...
2021-11-15 23:02:56
470
原创 Linux时间管理指令
1)date 查看系统当前时间2)cal 查看日历 date date观看服务器系统的时间date +%Y显示当前年份date +%m显示当前月份date +%d显示当前时那一天date "+%Y-%m-%d %H:%M%S"显示年月日时分秒date -s "2021-11-11 11:22:22"将日期设置位2021年11月11日11时22分22秒 2)cal ca...
2021-11-11 22:03:32
626
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅