<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hetertopia的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Hetertopia</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hetertopia]]></copyright><item><title><![CDATA[关于QT信号、槽、槽函数的讲解]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/147413858</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/147413858</guid><author>Hetertopia</author><pubDate>Thu, 24 Apr 2025 17:37:18 +0800</pubDate><description><![CDATA[首先按照专业术语的描述是，QT的信号与槽机制是一种对象间通信机制。直观的可以表现出一个对象发出信号，另一个对象通过槽函数响应这个信号，从而实现多模块之间的解耦通信。这个也是属于Qt框架最强大的特性之一，也是尤其适合GUI事件响应和模块间协作。通过举一个简单的例子，家门口有一个门铃按钮（就是等同于我们的信号），我们按了一下，屋里的电铃声就响了（槽函数）。按门铃 = 发出信号  电铃声响了 = 槽函数被触发 按下和响铃之间 = connect（）建立连接。]]></description><category></category></item><item><title><![CDATA[从零开始使用C++完成串口助手(一)]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/146351864</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/146351864</guid><author>Hetertopia</author><pubDate>Thu, 20 Mar 2025 23:40:31 +0800</pubDate><description><![CDATA[效果就成功实现了，那么我们目前一个简易的串口助手就完成了，下一章节我们会继续更改串口终端的内容。]]></description><category></category></item><item><title><![CDATA[C++ QT零基础教学（二）]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/146183385</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/146183385</guid><author>Hetertopia</author><pubDate>Sun, 16 Mar 2025 16:56:46 +0800</pubDate><description><![CDATA[在上一篇文章里面稍微讲解了一点C++的基础，但是后面想了想要是还是继续单纯写C++的内容的话要写到几百年年以后了，都不知道什么时候到QT了，所以这次就直接开始从QT开始描写了，当然肯定不会是很有难度，尽量还是会用通俗易懂的语言，因为毕竟我也是才开始接触QT的新手。]]></description><category></category></item><item><title><![CDATA[STM32DMA串口传输实验（标准库）]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/146100417</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/146100417</guid><author>Hetertopia</author><pubDate>Sun, 09 Mar 2025 22:52:03 +0800</pubDate><description><![CDATA[首先DMA的官方描述是（Direct Memory Access，中文存储器访问）是一种让外设和内存直接传输数据的机制，而不需要CPU参与数据搬运，从而提高效率。在STM32中，DMA可以从外设-->传递到内存（存储器）直接传输数据，例如（串口、ADC、SPI等外设）；也可以从存储器到存储器直接传输数据；也可以支持支持从外设到外设。]]></description><category></category></item><item><title><![CDATA[C++零基础教程（一）]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/146009110</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/146009110</guid><author>Hetertopia</author><pubDate>Tue, 04 Mar 2025 20:57:08 +0800</pubDate><description><![CDATA[继搭建好QT的环境过后，博主发现没接触过C++这代码看着着实有点抽象，总之就是一堆冒号还有一堆<<，然后还有一堆括号，总感觉有一种及其陌生的感觉，所以专门写一篇这个文章，用来记录自己学C++的过程，同时也是将自己的一些心得共享出来，如果能够帮到一些零基础的读者，那自然也是博主的荣幸。]]></description><category></category></item><item><title><![CDATA[在Vscode开发QT，完成QT环境的配置]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/145977880</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/145977880</guid><author>Hetertopia</author><pubDate>Mon, 03 Mar 2025 16:06:10 +0800</pubDate><description><![CDATA[在上一个章节配置完成了QT的环境，能够使用QT creator完成对QT的配置，接上话Vs Code的插件以及轻量化使得能够对QT开发的效率提高一大截，但是唯一的缺点就是环境还是稍微有点难配，（对于我这样的新手确实失败了几次）]]></description><category></category></item><item><title><![CDATA[零基础安装并搭建QT的环境以及QT开发工具]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/145962354</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/145962354</guid><author>Hetertopia</author><pubDate>Sun, 02 Mar 2025 21:21:37 +0800</pubDate><description><![CDATA[有些看过之前看过我博客的读者可能觉得有点奇怪，明明这个博主好像搞的是嵌入式怎么突然写了篇和QT有关的教程。总而言之就是因为接手了一个和QT有关的工程，导致我一个完全没接触过QT的人，需要去学习这个知识点，后来想想学习一下C++构成的上位机也不是什么坏事。]]></description><category></category></item><item><title><![CDATA[STM32寄存器控制引脚高低电平]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/145894453</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/145894453</guid><author>Hetertopia</author><pubDate>Thu, 27 Feb 2025 22:06:04 +0800</pubDate><description><![CDATA[最近在学习32代码的过程当中，虽然在学习IMX6ULL开发板的过程中接触过很多寄存器，最近在返回去看32的时候，在研究代码的时候发现自己对于寄存器的有些特性理解的不够深刻，所以下来的时候去查了资料，以及问了一下自己的学霸朋友楚灵魈，然后对有些寄存器还是有了一些新的认识。]]></description><category></category></item><item><title><![CDATA[手把手完成IMX6ULL系统移植文件（二）包含网络配置]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/145791015</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/145791015</guid><author>Hetertopia</author><pubDate>Wed, 26 Feb 2025 14:30:25 +0800</pubDate><description><![CDATA[上一章节我们并没有完成完成网络方面的相关配置，那么这一章节首先我们将完成的网络的配，以及接着上一篇文章继续对Linux系统进行移植。]]></description><category></category></item><item><title><![CDATA[手把手完成IMX6ULL系统移植实验,包含各种问题的处理(一)]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/144469716</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/144469716</guid><author>Hetertopia</author><pubDate>Fri, 21 Feb 2025 19:01:54 +0800</pubDate><description><![CDATA[在经过前面漫长的裸机试验,帮助我们学习并掌握开发板上的外设的底层原理,在我们之后移植完系统后,就可以将精力放在学习Linux框架上,所以我们要将Linux系统移植到我们的开发板中去,在开始移植的Linux系统的时候我们需要先移植一个Bootloader代码,Booloader用于启动Linux系统Bootloader是一个统称,叫做引导加载程序,指设备上电后负责有硬件初始化和操作系统加载的引导程序,并将控制权交给操作系统或应用程序,确保系统可以正常运行。]]></description><category></category></item><item><title><![CDATA[使用IMX6UL开发板控制RGB LCD显示图片]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/143626812</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/143626812</guid><author>Hetertopia</author><pubDate>Mon, 11 Nov 2024 14:20:46 +0800</pubDate><description><![CDATA[那么索引是如何计算出来的，这里我们先随便举一个例子，刚开始第一个像素点为（0，0），那么关于数组的索引就是0，那么就从0开始，往后取四个字节，也就是gImage_1[0]，gImage_1[1]，gImage_1[2]，gImage_1[3]，对应的就是下图四位的值。存储在index中的时候，我们按照BGRA的顺序访问数组中的四个连续字节，分别代表蓝色，绿色，红色，透明色，那么我们将这些颜色从数组中提取出来，然后再重新存储到一个变量中，然后方便我们对这些进行重新的组合或者排列，所以代码如下。]]></description><category></category></item><item><title><![CDATA[关于IMX6UL的RGB LCD无法显示，只能打开背光的解决方案]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/143612885</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/143612885</guid><author>Hetertopia</author><pubDate>Fri, 08 Nov 2024 09:03:06 +0800</pubDate><description><![CDATA[所以这个问题就是编译器版本不兼容的问题，解决后代码就可以正常编译与烧写，当时这个问题也是困扰了博主好久，一直以为是自己的代码编写有误，但是后面甚至把参考例程拿过来都不行，就只能去寻找其他原因了，发现就是编译器问题。博主在学习IMX6UL的RGB LCD屏幕的驱动编写时，遇到了一些问题，首先就是无论怎么修改代码，都只能打开屏幕的背光，并且关于代码当中的inline修饰符函数在编译代码的时候我产生警告。首先通过如下命令查询GCC编译器的版本。]]></description><category></category></item><item><title><![CDATA[IMX6UL的LCD显示屏实验，代码详细分析]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/143193015</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/143193015</guid><author>Hetertopia</author><pubDate>Fri, 08 Nov 2024 08:46:02 +0800</pubDate><description><![CDATA[设置寄存器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。]]></description><category></category></item><item><title><![CDATA[IMX6UL的RGB的显示实验]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/143013375</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/143013375</guid><author>Hetertopia</author><pubDate>Sat, 19 Oct 2024 14:10:25 +0800</pubDate><description><![CDATA[上面提到过，一个像素点就相当于一个RGB小灯，通过控制RGB三种颜色亮度就可以显示楚各种各样的色彩，那么一般如何控制这三种颜色显示的亮度呢，一般一个RGB这三部分使用8bit的数据，也就是意味着每个颜色通道可以表示256种不同的亮度级别（2的8次方=256），每一位字节都可以是0和1，所以八位可以组成从00000000（0）到11111111（255）的所有二进制数，代表了从有颜色到这个颜色的最大亮度。如上图就是1080P显示器的像素示意图，X轴就是LCD显示器的横轴，Y轴就是显示器的竖轴。]]></description><category></category></item><item><title><![CDATA[使用IMX6UL实现UART串口通信]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/142929456</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/142929456</guid><author>Hetertopia</author><pubDate>Wed, 16 Oct 2024 21:23:43 +0800</pubDate><description><![CDATA[下面的代码可以直接设置串口1的波特率，但是寄存器那里也可以设置，所以这里我们选择的是寄存器设置，那我们就把下面的函数设置给屏蔽掉，只是告诉读者还有另外一种写法，在以上内容配置完毕后，那么就通过上面编写好的串口使函数，重新对串口1进行使能，但是编写的这个函数是相对的比较复杂的，有意愿的同学可以自己下来了解和分析一下代码，这里就不过多讲解这种较为复杂的方法了。然后,p递增，指向下一个字符，这个过程会一直重复，直到*p为0（即遇到字符串的结束标志），此时while循环的条件不再满足，循环结束。]]></description><category></category></item><item><title><![CDATA[在IMX6ul中，使用GPT定时器实现高精度延时]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/142854912</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/142854912</guid><author>Hetertopia</author><pubDate>Mon, 14 Oct 2024 17:18:16 +0800</pubDate><description><![CDATA[如比较器，用于将当前的计数值与设定的输出寄存器中的值进行比较，或者其他模块例如中断模块，以便在计数器达到某个特定值时产生中断信号或者其他事件，与计数器之间的关系是，Counter Value Bus 从计数器输出，代表计数器的状态，并通过该总线发送给框图中的其他逻辑单元（如比较器、捕获单元等）。OM1，OM2，OM3这些是定时器输出比较事件的标志，当计数器与比较寄存器值相等时，触发相应的输出模块，输出信号（GPT_COMPARE1，GPT_COMPARE2，GPT_COMPARE3）。]]></description><category></category></item><item><title><![CDATA[使用IMX6UL定时器EPTI实现延时]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/142827019</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/142827019</guid><author>Hetertopia</author><pubDate>Fri, 11 Oct 2024 13:41:23 +0800</pubDate><description><![CDATA[因此，我们可以借助定时器来实现消抖，按键采用中断驱动方式，当按键按下以后触发按键中断，在按键中断中开启一个定时器，定时周期为 10ms，当定时时间到了以后就会触发定时器中断，最后在定时器中断处理函数中读取按键的值，如果按键值还是按下状态那就表示这是一次有效的按键。也就是如果在按键按下的时候产生相关中断，中断产生后执行这个中断处理函数，这个函数的作用就是初始化定时器，然后设置周期过后开启定时器，也就是上面我们编写的那个函数，最后还是在完成这个中断后需要清除标志位，以用来准备下一次的中断产生。]]></description><category></category></item><item><title><![CDATA[基于IMX6UL的EPIT的定时器实验]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/142727521</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/142727521</guid><author>Hetertopia</author><pubDate>Thu, 10 Oct 2024 15:23:47 +0800</pubDate><description><![CDATA[那么，我们继续看下图，到CMP也就是比较器，主要负责将计数寄存器中的值与比较寄存器中的设定值进行比较，具体来说，当计数器中的当前值等于比较寄存器的值时，CMP会输出一个信号，信号会沿着这个框图继续走，经过CMP后，有一个信号箭头返回到Counter Register它的作用通常是，自动重载当计数器到达终点（比如达到比较值 CMP 后）时，计数器可能会自动加载一个预设值（通常来自Load Register）来重新开始计数。产生中断或信号，当计数器到达设定值时，定时器会触发中断，告知系统已达到预定时间。]]></description><category></category></item><item><title><![CDATA[用IMX6UL开发板编写按键输入实验]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/142492538</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/142492538</guid><author>Hetertopia</author><pubDate>Sun, 06 Oct 2024 12:50:15 +0800</pubDate><description><![CDATA[然后我们在bsp_gpio.c当中这么写，首先这段代码的作用是用于初始化GPIO引脚的函数，它接受三个返回参数，一个指向GPIO基地址的指针base，一个整数pin表示要操作的引脚编号，以及一个指向gpio_pin_config_t结构体的指针config,这个函数当中有一个if判断语句，如果方向是输入，那么就执行if语句当中的对应引脚给初始化。在结构体的这行代码中，gpio_pin_direction_t意思是声明了一个名为direction的枚举变量，它的类型是direction_t。]]></description><category></category></item><item><title><![CDATA[IMX6UL开发板中断实验（三）]]></title><link>https://blog.youkuaiyun.com/Hetertopia/article/details/142455613</link><guid>https://blog.youkuaiyun.com/Hetertopia/article/details/142455613</guid><author>Hetertopia</author><pubDate>Tue, 24 Sep 2024 02:23:36 +0800</pubDate><description><![CDATA[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引脚的中断屏蔽控制。]]></description><category></category></item></channel></rss>