- 博客(33)
- 收藏
- 关注
原创 C++ QT零基础教学(二)
在上一篇文章里面稍微讲解了一点C++的基础,但是后面想了想要是还是继续单纯写C++的内容的话要写到几百年年以后了,都不知道什么时候到QT了,所以这次就直接开始从QT开始描写了,当然肯定不会是很有难度,尽量还是会用通俗易懂的语言,因为毕竟我也是才开始接触QT的新手。
2025-03-16 16:56:46
918
原创 STM32DMA串口传输实验(标准库)
首先DMA的官方描述是(Direct Memory Access,中文存储器访问)是一种让外设和内存直接传输数据的机制,而不需要CPU参与数据搬运,从而提高效率。在STM32中,DMA可以从外设-->传递到内存(存储器)直接传输数据,例如(串口、ADC、SPI等外设);也可以从存储器到存储器直接传输数据;也可以支持支持从外设到外设。
2025-03-09 22:52:03
840
原创 C++零基础教程(一)
继搭建好QT的环境过后,博主发现没接触过C++这代码看着着实有点抽象,总之就是一堆冒号还有一堆<<,然后还有一堆括号,总感觉有一种及其陌生的感觉,所以专门写一篇这个文章,用来记录自己学C++的过程,同时也是将自己的一些心得共享出来,如果能够帮到一些零基础的读者,那自然也是博主的荣幸。
2025-03-04 20:57:08
742
原创 在Vscode开发QT,完成QT环境的配置
在上一个章节配置完成了QT的环境,能够使用QT creator完成对QT的配置,接上话Vs Code的插件以及轻量化使得能够对QT开发的效率提高一大截,但是唯一的缺点就是环境还是稍微有点难配,(对于我这样的新手确实失败了几次)
2025-03-03 16:06:10
1891
原创 零基础安装并搭建QT的环境以及QT开发工具
有些看过之前看过我博客的读者可能觉得有点奇怪,明明这个博主好像搞的是嵌入式怎么突然写了篇和QT有关的教程。总而言之就是因为接手了一个和QT有关的工程,导致我一个完全没接触过QT的人,需要去学习这个知识点,后来想想学习一下C++构成的上位机也不是什么坏事。
2025-03-02 21:21:37
865
原创 STM32寄存器控制引脚高低电平
最近在学习32代码的过程当中,虽然在学习IMX6ULL开发板的过程中接触过很多寄存器,最近在返回去看32的时候,在研究代码的时候发现自己对于寄存器的有些特性理解的不够深刻,所以下来的时候去查了资料,以及问了一下自己的学霸朋友楚灵魈,然后对有些寄存器还是有了一些新的认识。
2025-02-27 22:06:04
988
原创 手把手完成IMX6ULL系统移植文件(二)包含网络配置
上一章节我们并没有完成完成网络方面的相关配置,那么这一章节首先我们将完成的网络的配,以及接着上一篇文章继续对Linux系统进行移植。
2025-02-26 14:30:25
921
原创 手把手完成IMX6ULL系统移植实验,包含各种问题的处理(一)
在经过前面漫长的裸机试验,帮助我们学习并掌握开发板上的外设的底层原理,在我们之后移植完系统后,就可以将精力放在学习Linux框架上,所以我们要将Linux系统移植到我们的开发板中去,在开始移植的Linux系统的时候我们需要先移植一个Bootloader代码,Booloader用于启动Linux系统Bootloader是一个统称,叫做引导加载程序,指设备上电后负责有硬件初始化和操作系统加载的引导程序,并将控制权交给操作系统或应用程序,确保系统可以正常运行。
2025-02-21 19:01:54
1145
原创 使用IMX6UL开发板控制RGB LCD显示图片
那么索引是如何计算出来的,这里我们先随便举一个例子,刚开始第一个像素点为(0,0),那么关于数组的索引就是0,那么就从0开始,往后取四个字节,也就是gImage_1[0],gImage_1[1],gImage_1[2],gImage_1[3],对应的就是下图四位的值。存储在index中的时候,我们按照BGRA的顺序访问数组中的四个连续字节,分别代表蓝色,绿色,红色,透明色,那么我们将这些颜色从数组中提取出来,然后再重新存储到一个变量中,然后方便我们对这些进行重新的组合或者排列,所以代码如下。
2024-11-11 14:20:46
1022
原创 关于IMX6UL的RGB LCD无法显示,只能打开背光的解决方案
所以这个问题就是编译器版本不兼容的问题,解决后代码就可以正常编译与烧写,当时这个问题也是困扰了博主好久,一直以为是自己的代码编写有误,但是后面甚至把参考例程拿过来都不行,就只能去寻找其他原因了,发现就是编译器问题。博主在学习IMX6UL的RGB LCD屏幕的驱动编写时,遇到了一些问题,首先就是无论怎么修改代码,都只能打开屏幕的背光,并且关于代码当中的inline修饰符函数在编译代码的时候我产生警告。首先通过如下命令查询GCC编译器的版本。
2024-11-08 09:03:06
253
原创 IMX6UL的LCD显示屏实验,代码详细分析
设置寄存器LCDIF_TRANSFER_COUNT,此寄存器设置RGB LCD屏幕分辨率大小,寄存器分为两部分,高16位,低16位,高16位是V_COUNT,是LCD的垂直分辨率。博主屏幕是1024*600,则V_COUNT为600,H_COUNT是1024。首先复用这三个引脚为IO引脚,其次就是设置它们的引脚为输入模式,来读取它们的电平获取M0,M1,M2的值所组成的ID号,这里以M0的LCD_DATA23的寄存器为例子,在将其复用过后,设置MUX_MODE位为0101,另外的M0,M1,M2。
2024-11-08 08:46:02
604
原创 IMX6UL的RGB的显示实验
上面提到过,一个像素点就相当于一个RGB小灯,通过控制RGB三种颜色亮度就可以显示楚各种各样的色彩,那么一般如何控制这三种颜色显示的亮度呢,一般一个RGB这三部分使用8bit的数据,也就是意味着每个颜色通道可以表示256种不同的亮度级别(2的8次方=256),每一位字节都可以是0和1,所以八位可以组成从00000000(0)到11111111(255)的所有二进制数,代表了从有颜色到这个颜色的最大亮度。如上图就是1080P显示器的像素示意图,X轴就是LCD显示器的横轴,Y轴就是显示器的竖轴。
2024-10-19 14:10:25
1174
原创 使用IMX6UL实现UART串口通信
下面的代码可以直接设置串口1的波特率,但是寄存器那里也可以设置,所以这里我们选择的是寄存器设置,那我们就把下面的函数设置给屏蔽掉,只是告诉读者还有另外一种写法,在以上内容配置完毕后,那么就通过上面编写好的串口使函数,重新对串口1进行使能,但是编写的这个函数是相对的比较复杂的,有意愿的同学可以自己下来了解和分析一下代码,这里就不过多讲解这种较为复杂的方法了。然后,p递增,指向下一个字符,这个过程会一直重复,直到*p为0(即遇到字符串的结束标志),此时while循环的条件不再满足,循环结束。
2024-10-16 21:23:43
1059
原创 在IMX6ul中,使用GPT定时器实现高精度延时
如比较器,用于将当前的计数值与设定的输出寄存器中的值进行比较,或者其他模块例如中断模块,以便在计数器达到某个特定值时产生中断信号或者其他事件,与计数器之间的关系是,Counter Value Bus 从计数器输出,代表计数器的状态,并通过该总线发送给框图中的其他逻辑单元(如比较器、捕获单元等)。OM1,OM2,OM3这些是定时器输出比较事件的标志,当计数器与比较寄存器值相等时,触发相应的输出模块,输出信号(GPT_COMPARE1,GPT_COMPARE2,GPT_COMPARE3)。
2024-10-14 17:18:16
936
原创 使用IMX6UL定时器EPTI实现延时
因此,我们可以借助定时器来实现消抖,按键采用中断驱动方式,当按键按下以后触发按键中断,在按键中断中开启一个定时器,定时周期为 10ms,当定时时间到了以后就会触发定时器中断,最后在定时器中断处理函数中读取按键的值,如果按键值还是按下状态那就表示这是一次有效的按键。也就是如果在按键按下的时候产生相关中断,中断产生后执行这个中断处理函数,这个函数的作用就是初始化定时器,然后设置周期过后开启定时器,也就是上面我们编写的那个函数,最后还是在完成这个中断后需要清除标志位,以用来准备下一次的中断产生。
2024-10-11 13:41:23
941
原创 基于IMX6UL的EPIT的定时器实验
那么,我们继续看下图,到CMP也就是比较器,主要负责将计数寄存器中的值与比较寄存器中的设定值进行比较,具体来说,当计数器中的当前值等于比较寄存器的值时,CMP会输出一个信号,信号会沿着这个框图继续走,经过CMP后,有一个信号箭头返回到Counter Register它的作用通常是,自动重载当计数器到达终点(比如达到比较值 CMP 后)时,计数器可能会自动加载一个预设值(通常来自Load Register)来重新开始计数。产生中断或信号,当计数器到达设定值时,定时器会触发中断,告知系统已达到预定时间。
2024-10-10 15:23:47
1135
原创 用IMX6UL开发板编写按键输入实验
然后我们在bsp_gpio.c当中这么写,首先这段代码的作用是用于初始化GPIO引脚的函数,它接受三个返回参数,一个指向GPIO基地址的指针base,一个整数pin表示要操作的引脚编号,以及一个指向gpio_pin_config_t结构体的指针config,这个函数当中有一个if判断语句,如果方向是输入,那么就执行if语句当中的对应引脚给初始化。在结构体的这行代码中,gpio_pin_direction_t意思是声明了一个名为direction的枚举变量,它的类型是direction_t。
2024-10-06 12:50:15
1024
原创 IMX6UL开发板中断实验(三)
UART1 CTS 按键这个引脚对应的是GPIO1_IO18,现在我们需要找到这个引脚对应的中断ID号,可以看到GPIO16-31是67这个ID号,但是这并不是他实际的ID号,他的实际ID号还需要加上32,因为PPI(私有中断ID)和SGI(软件中断),以及SPI共享外设中断,这些都是在之前提到过的,这里编号全是SPI共享外设中断,而PPI和SGI加起来一共有32个中断,所以需要在这里67的基础上再加上32,所以GPIO16-31引脚对应的中断是99。寄存器中的每一位都对应一个GPIO引脚的中断屏蔽控制。
2024-09-24 02:23:36
817
原创 IMX6UL开发板的GPIO中断实验(二)
因为在进入irq后,irq下的lr寄存器保存的是svc模式下当时PC的值,即被中断的指令的下一条指令的地址+4(arm三级流水线时),lr中保存的该地址可用于中断程序处理完后,返回到被中断的指令处继续运行(sub lr, lr , #4, 经过此指令执行后lr中保存的是断点的下一条指令的地址)。所以我们需要对其里面的每一个,首先一共有160个这个中断信号,每个中断信号都需要一个中断服务函数,所以创建一个for循环,能够让每个都可以被初始化,然后再编写这个中断信号要执行的中断服务函数,
2024-09-23 10:19:48
835
原创 IMX6UL开发板的GPIO中断实验,编写中断向量表(一)
通过为每个模式分配独立的堆栈空间,并设置正确的堆栈指针,可以确保每个模式都有自己独立的堆栈区域,从而避免数据冲突和损坏。根据上面的表的内容创建中断向量表,中断向量表位于程序最开始的地方,在这里就是start.S文件的最前面,在ldr pc那里就是中断向量表,当指定的中断发生以后就会调用对应的中断复位函数,比如复位中断发生以后就会执行ldr pc, =Reset_Handler,也就是调用函数Reset_Handler,函数Reset_Handler就是复位中断的中断复位函数,对于其它的中断也是一样的。
2024-09-09 23:13:42
876
原创 基于IMX6ULL的Cortex-A中断原理讲解,以及编写其中断向量表
但是CPU是如何知道中断源产生后就找到对应的中断服务函数呢,这个时候就要引入中断向量表,它的主要功能是描述中断对应的中断服务函数,每个中断源都有一个唯一的中断号(也称向量号),CPU在接收到中断信号后,会读取中断号,并将其作为索引到中断向量表中查找对应的中断服务函数地址,找到地址后,CPU会跳转到该地址执行中断服务函数其实中断向量表类似于一张表格,表格是按照内存地址由低到高,里面的每一个地址都存放一个函数。例如,GIC可以将优先级较高的中断分配给一个核心,而将低优先级的中断分配给另一个核心。
2024-09-07 13:32:29
895
原创 完成IMX6UL开发板的各路PLL时钟配置
在之前并没有使用过这样的操作,为什么在这里开始使用这么繁琐的写法呢。首先第一步要做的就是将此位寄存器清零,所以代码的第一步就是将其清零,3 = 0011将这两位向左移动18位,对应的就是18和19位,也也就是我们需要配置的位,我们的目的是使这两位清零,其他位保持不变,最后与上寄存器,得到的结果就是32位全部为0,达到了18.19位被清零(虽然本身就是为0,但是为了养成习惯,需要规范的写法),其他位也是仍然保持为0。就可以将此为清零,这个时钟选择器也完成了。
2024-09-01 15:41:29
1013
原创 如何修改imx6ul开发板主频实验
这个寄存器的第二位就是PLL1_SW_CLK_SEL,也就是可以选择输出哪条时钟频率的位,选择生成pll1_sw_clk的源,因为需要设置pll1_main_clk,所以这里就需要将时钟切换为step_clk,然后设置切换完成过后,我们还需要对step_clk进行时钟频率的配置,上图的24MHz晶振同样进入了step_clk,再观察这个寄存器可以看到此此寄存器的第九位就是对step_clk的配置,使用的是同一个寄存器,既然思路已经理清楚了,那我们就在代码中体现。
2024-08-29 15:55:28
1041
原创 IMX6ULL时钟树原理讲解(超详细)
I.MX6U 的外设有很多,不同的外设时钟源不同,NXP 将这些外设的时钟源进行了分组, 一共有 7 组,这 7 组时钟源都是从 24MHz 晶振 PLL 而来的,因此也叫做 7 组 PLL。这个就是对于IMX6UL开发板的时钟源生成图上的信息的一个基本讲解,接下来我们就需要开始讲解时钟树,作为时钟系统的基础,时钟源(如晶振或其他振荡器)生成系统中的基准时钟信号。这些信号是整个系统中所有时钟信号的起点,但是时钟树的作用是负责将时钟源中分配的信号到系统中的各个部分,并保持时钟信号的稳定性和完整性。
2024-08-22 11:53:25
1036
2
原创 编写IMX6UL蜂鸣器实验,使用SDK库
上几节,我们讲解了如何移植SDK库,并且如何使用BSP工程管理,使得能够规范的管理我们的工程文件,这一讲,我们就使用前面的方法,来编写IMX6uL开发板上的蜂鸣器实验
2024-08-13 17:03:21
1038
原创 如何使用BSP管理自己的工程文件(IMX6UL开发板)
对于后半的$(wildcard $(dir)/*.S)$(wildcard $(dir)/*.S):在每次循环中,这部分代码用于查找 $(dir) 目录中的所有 .S 文件。需要改变的地方是我们这里的这个链接文件,因为在之前我们的start.S文件都是直接被放在根目录下方的,现在我们的启动文件是被放在文件夹project下方,所以需要在链接text段的时候需要重新给定启动文件的文件路径,在前方加入obj/也就是说明我们这个文件obj文件夹的下方,之后链接文件便可以正确的找到这个文件的路径。
2024-08-13 12:51:33
1209
原创 如何编写Makefile控制编译Arm(IMX6UL),及烧写程序(详细讲解Makefile语法7-)
OBJS变量中包含了.o文件文件列表的变量。这意味着,无论你的程序有多少个对象文件,只要它们包含了.text段,链接器都会将这些段的内容收集起来,并按照链接脚本中指定的顺序(在这个例子中是先start.o,然后main.o,最后是所有其他文件)放置在最终的输出文件的.text段中。这里明确指定了链接器应该将start.o和main.o中的.text段内容放置在.text段的开头(或者更准确地说,是紧随当前位置的下一个可用位置,但在这个上下文中,由于它们是第一个被列出的,所以它们会位于.text段的开始)。
2024-08-12 22:01:35
980
原创 使用官方SDK库编写IMX6UL的LED灯驱动(超详细原理分析)
在我们编写驱动的时候需要使用到寄存器,但是往往自己编写寄存器的时候特别繁琐,容易出错,而且还需要对同一个寄存器反复定义,所以为了开发的科学性我们使用NXP官方专门为IMU6UL提供的SDK包来编写IMX6UL的第一个LED灯驱动。在此前先说明,这里我是关于SDK的包我已经参照正点原子的视频全部移植完成了,在之后需要使用的文件我都会放在链接,如果想要自己重新移植一次我也会将SDK的安装包放在文件中,然后可以惨参考正点原子的SDK使用和移植教程,但是这里我就不讲解具体的移植过程了。
2024-08-09 12:39:11
927
原创 学习Linux之ARM,IMX6ULL裸机开发,搭建环境
然后我们开始下载我们的编辑器,这里选择使用Vscode,它也是支持Linux版本的,并且是免费的,我们还是选择在Windows中下载好,然后传输到Ubuntu中,博主这里提供了1.32.版本的Vscode,也是同样放在了资料中,如果对其他版本有需求,可以去到Vscode的官网进行下载,但是记得一定是要下载Linux版本的,然后我们就开始配置。然后我们安装使用这个指令安装一下相关的库,用于安装Linux标准基础的核心组件和GNU标准C++库的32位版本,这有助于增强系统的兼容性和支持更广泛的应用程序。
2024-07-31 14:45:38
1257
原创 基于Linux为服务器,搭建的一个web网站
但是这个地方需要知道的是,我们这个网站搭建的是基于我们Linux作为服务器的,所以如果我们关停了我们的服务器这个网站自然也会被关闭,所以为什么很多人很多时候都是选择的云服务器,除了可以提供相关防护外,最大的优势他是不会关闭的,简单的例子,当别人在晚上想要访问你的网站时候,你因为在睡觉使电脑休眠或者关机了,这个时候就无法访问你的网站,可能你就会因此丢失一个可能的客户对吧,所以这个地方也必须要了解。在同学们学习了一定的Linux知识后,我们可以尝试去进一步实践这些知识,并将其应用到实际的项目中去。
2024-05-15 12:30:26
3116
原创 使用主机远程连接虚拟机中的Linux,基于宝塔Linux面板
紧接上一篇,我们在虚拟机上已经成功搭建了我们的Linux的系统,其实在我们的实际运用中服务器通常被放置在IDC机房或云端,管理员很少能直接接触到服务器的本地界面。通过在主机上远程连接虚拟机中的Linux模拟实际工作场景,提升学习者远程管理Linux系统方面的技能并且过远程连接工具,用户可以直接在主机上操作虚拟机中的Linux系统,无需在虚拟机界面和主机界面之间频繁切换。这大大提高了操作效率,同时也为用户提供了更为便捷的工作方式。
2024-05-12 21:55:34
2328
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人