<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Vvc_Python的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Vvc_Python</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Vvc_Python]]></copyright><item><title><![CDATA[ARM裸机开发-PWM]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/167132237</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/167132237</guid><author>Vvc_Python</author><pubDate>Tue, 06 Oct 2026 13:39:55 +0800</pubDate><description><![CDATA[本文介绍了基于I.MX6UL开发板的LCD背光亮度控制方法，利用PWM（脉宽调制）技术通过调节占空比实现背光亮度调节。通过配置PWM外设寄存器，设置时钟源、分频系数和周期值，结合FIFO中断机制动态更新采样值，实现占空比可调的PWM信号输出。代码中通过中断服务函数实时更新占空比，确保背光亮度平滑调节，有效提升显示体验并节省功耗。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-LCD]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/167085961</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/167085961</guid><author>Vvc_Python</author><pubDate>Mon, 05 Oct 2026 22:50:38 +0800</pubDate><description><![CDATA[本文介绍了基于imx6ull的RGB LCD显示屏（ATK4384，800×480）的显示原理与初始化实现。通过分析分辨率、屏幕尺寸、像素颜色深度及同步信号（PCLK、HSYNC、VSYNC、DE），计算得出60Hz刷新率下像素时钟约为31MHz。硬件初始化包括设置引脚复用功能和电气属性，确保各信号线正确配置，为后续图像显示奠定基础。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-SPI]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166851132</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166851132</guid><author>Vvc_Python</author><pubDate>Sun, 04 Oct 2026 00:30:35 +0800</pubDate><description><![CDATA[SPI（串行外设接口）是Motorola定义的高速、全双工、同步串行通信协议，仅需四根线（SCLK、MOSI、MISO、CS），广泛用于EEPROM、传感器等设备。其通信模式由CPOL和CPHA决定，共四种工作模式。本文以IMX6ULL平台为例，介绍了SPI3通道的引脚复用配置、寄存器设置及初始化流程，并实现ADXL345传感器的读写操作，通过发送寄存器地址与占位字节完成数据交互，验证了SPI在嵌入式系统中的高效应用。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-ADC]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166788932</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166788932</guid><author>Vvc_Python</author><pubDate>Tue, 29 Sep 2026 01:21:43 +0800</pubDate><description><![CDATA[本文介绍了IMX6ULL芯片中ADC外设的工作原理与配置方法，包括采样、量化及分辨率概念，重点阐述了基于逐次逼近法的12位ADC实现。通过寄存器配置（如时钟分频、基准电压选择、通道设置等）完成引脚复用与电气属性设置，并实现校准、单次转换读取及模拟值转换。代码示例展示了初始化、校准、读取原始数据及转换为实际电压的过程，最终输出0~3.3V范围内的精确模拟信号值。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-I2C-LM75]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166741617</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166741617</guid><author>Vvc_Python</author><pubDate>Mon, 28 Sep 2026 15:26:24 +0800</pubDate><description><![CDATA[本文基于i.MX6ULL平台，实现LM75温度传感器的I2C通信读取。通过改进寄存器地址与长度的定义（使用unsigned short和int），提升代码通用性。采用Linux I2C核心层架构，封装i2c_transfer接口，通过master_xfer函数统一调用底层适配器驱动，实现跨芯片兼容。最终通过读取2字节温度数据并右移7位，计算得温度值，精度达0.5℃，验证了驱动分层设计的高效性与可移植性。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-I2C-E2PROM]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166694183</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166694183</guid><author>Vvc_Python</author><pubDate>Sun, 27 Sep 2026 23:45:35 +0800</pubDate><description><![CDATA[本文介绍了I2C通信协议的基本原理与AT24C02 EEPROM的使用，涵盖I2C时序、设备地址与寄存器地址区别、硬件配置（引脚复用、上拉电阻）及基于IMX6ULL的I2C读写实现。通过配置I2C1时钟分频、电气属性，并编写初始化与读写函数，实现了对AT24C02的读写操作，重点说明了起始/停止信号、应答机制及重发设备地址的读时序流程。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-UART]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166693736</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166693736</guid><author>Vvc_Python</author><pubDate>Sun, 27 Sep 2026 00:58:17 +0800</pubDate><description><![CDATA[本文介绍基于IMX6ULL平台配置CH340C串口通信的实现过程。通过设置IOMUXC引脚复用与电气属性，启用UART1收发功能；利用UCR2、UCR3、UFCR寄存器及UBMR/UBIR计算115200波特率；编写putc、puts、getc函数实现字符发送与接收；最终导入stdio库，通过scanf与printf实现数据交互，结合VOFA软件完成串口通信调试。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-EPIT与GPT]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166647011</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166647011</guid><author>Vvc_Python</author><pubDate>Sat, 26 Sep 2026 18:03:23 +0800</pubDate><description><![CDATA[和 t3 这三个时刻会触发按键中断，每次进入中断处理函数我们都重新开器定时器中断，所以会在 t1、t2和 t3 这三个时刻开器定时器中断。接下来我们学习如何使用定时器来实现按键消抖，使用定时器既可以实现按键消抖，而且也不会浪费CPU 性能，这个也是 Linux 驱动里面按键消抖的做法。中间为计数器，装入初值，每减一次与比较寄存器比较，若比较成功，ITIF置1（中断标记位），（最后记得清零），此时若ITIE为1（中断使能位），则通过与门为真，发出中断，同时，Load加载寄存器，给初值寄存器重新赋值。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-时钟]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166643209</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166643209</guid><author>Vvc_Python</author><pubDate>Fri, 25 Sep 2026 22:09:11 +0800</pubDate><description><![CDATA[先采用step_clk路，通过选通门选择osc_clk或者下面的时钟频率，先将ARM的工作频率切换为24MHZ，再配置PLL，设置二分频率，待稳定后切换为pll1_main_clk传给ARM.PLL1为内核配置时钟，PLL2为外设配置时钟，PLL3为USB设备配置时钟，一共7个PLL，8个PFD。可见，只需修改FRAC域配置PFD倍频因子，CLKGATE打开cg门。PLL2锁倍频，所以参考手册没有，只需修改PLL2下的4个PFD。选中PLL2，设置AHB倍频因子，IPG倍频因子。下图为该芯片的时钟配置。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-中断]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166507827</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166507827</guid><author>Vvc_Python</author><pubDate>Thu, 24 Sep 2026 06:37:20 +0800</pubDate><description><![CDATA[可以读出GIC的基地址，不过可以通过Cortex-A7的固件库实现，即初始化GIC函数inline:内联函数，本质是函数，调用内联函数前，必须有该函数的定义，编译时，内联函数会在函数调用位置被展开，类似宏，就地展开，不用跳转函数，提高函数执行效率，可在头文件中定义函数。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-蜂鸣器与按键]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166350669</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166350669</guid><author>Vvc_Python</author><pubDate>Tue, 22 Sep 2026 12:56:01 +0800</pubDate><description><![CDATA[显然底层源码通过宏定义，指定了对应的GPIOx的基地址，将GPIOx的基地址强转为GPIO_Type *的指针，而GPIO_Type则为定义了GPIO里的8个寄存器的结构体，如此即可通过GPIOx指针访问对应结构体成员的寄存器进行赋值。先是引脚的名字，再是引脚的具体复用功能，不同引脚具有不同的复用功能，如下图所示,上篇点亮LED灯对应的GPIO1_IO03引脚具有多个复用功能，而SNVS_TAMPER1则只有GPIO5_IO01的功能。显然CCM_Type结构体同GPIO一样，内部定义了对应的寄存器。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-点亮LED灯]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/166016152</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/166016152</guid><author>Vvc_Python</author><pubDate>Sat, 19 Sep 2026 23:59:25 +0800</pubDate><description><![CDATA[本文开始在VScode上使用IMX6ULL以真机进行学习，芯片原理图参考如下。：这是整块板子的“大脑”。NXP（恩智浦）的 IMX6ULL 基于架构，主频通常在 528MHz 或 800MHz。：相当于电脑的。它是掉电丢失的。当 Linux 系统启动时，，它负责临时存放程序运行时产生的大量数据。：相当于电脑的。它是掉电不丢失的。用来永久存放系统镜像（uboot、kernel、设备树、rootfs文件系统）和用户程序。]]></description><category></category></item><item><title><![CDATA[ARM裸机开发-汇编基础]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/165759661</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/165759661</guid><author>Vvc_Python</author><pubDate>Fri, 18 Sep 2026 00:59:30 +0800</pubDate><description><![CDATA[4位旋转位若直接表示位移0-15位，则立即数最大只能位移15位，无法覆盖32位寄存器的所有角落，故×2，最终 32 位立即数 = imm8 循环右移 2×rotate 位（移位步数永远是偶数：0、2、4 …30 位，硬件无法实现移位奇数位，易知，能表示的最大立即数为0xFF00 0000，即0xFF循环右移8位，rotate=4，12位则为0x4FF）最高位1至最低位1之间的二进制数序列：0011 1110 1010 1101 从第一个1开始到最后一个1之间超过8位，不满足条件1，所以这个数不是立即数。]]></description><category></category></item><item><title><![CDATA[嵌入式硬件-51单片机]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164883477</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164883477</guid><author>Vvc_Python</author><pubDate>Mon, 14 Sep 2026 20:24:32 +0800</pubDate><description><![CDATA[本系列博客以STC98552RC芯片为示例学习。]]></description><category></category></item><item><title><![CDATA[Linux网络编程-sqlite数据库]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164628540</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164628540</guid><author>Vvc_Python</author><pubDate>Thu, 10 Sep 2026 00:02:05 +0800</pubDate><description><![CDATA[create table 表名(列名1 数据类型1， 列名2 数据类型2， 列名3 数据类型3);CREATE TABLE 表名(列名1 数据类型1， 列名2 数据类型2， 列名3 数据类型3);select * from class1 where name like "马__";select * from class1 where name like "马%";insert into 表名 values(值1， 值2， 值3);select 列名1， 列名2 from 表名；]]></description><category></category></item><item><title><![CDATA[Linux网络编程-TCP并发服务器]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164425952</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164425952</guid><author>Vvc_Python</author><pubDate>Mon, 07 Sep 2026 00:18:54 +0800</pubDate><description><![CDATA[单循环服务器：只能处理一个客户端任务的服务器。并发服务器：可以同时处理多个客户端任务的服务器（一对多）。UDP服务端：具备并发性能TCP服务端：建立连接，单循环服务器。进程资源开销大，在有限平台下，并发量比较小。资源开销小，在相同平台下，并发量比多进程大。多线程模型在客户端建立连接时，创建线程和销毁线程有时间消耗。生产者-消费者设计模式主线程：生产任务线程池：执行任务任务队列在不创建新进程/线程的前提下，使用一个进程同时检测多路IO。IO：对文件读写sockfd。]]></description><category></category></item><item><title><![CDATA[Liunx网络编程-应用层]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164375727</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164375727</guid><author>Vvc_Python</author><pubDate>Sat, 05 Sep 2026 16:09:56 +0800</pubDate><description><![CDATA[keep-alive: 长连接：HTTP通信结束，保持一定时间的连接再断开。GET / HTTP/1.1\r\n        （/表示主页）close：短连接：HTTP通信结束，立马断开连接。基于传输层TCP协议，端口80。HTTPS ：SSL加密方式。1. HTTP协议工作流程。]]></description><category></category></item><item><title><![CDATA[Liunx网络编程-传输层]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164212455</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164212455</guid><author>Vvc_Python</author><pubDate>Tue, 01 Sep 2026 10:47:23 +0800</pubDate><description><![CDATA[网络通信：不同主机、进程间通信。]]></description><category></category></item><item><title><![CDATA[Liunx多任务-IPC机制]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164141652</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164141652</guid><author>Vvc_Python</author><pubDate>Fri, 28 Aug 2026 22:50:02 +0800</pubDate><description><![CDATA[无名管道：只能用在具有亲缘关系的进程间通信（父子进程）操作流程:1.创建并打开管道:pipe();2.读管道:read();3.写管道:write();4.关闭管道:close();参数:pipefd:管道读端和写端的文件描述符pipefd[0]        读端pipefd[1]        写端返回值:成功:0失败:-1管道的特点:管道本质是内核中的一段缓冲区，默认64K字节，遵循队列存储方式(FIFO)，]]></description><category></category></item><item><title><![CDATA[Linux多任务-线程篇]]></title><link>https://blog.youkuaiyun.com/Vvc_Python/article/details/164138444</link><guid>https://blog.youkuaiyun.com/Vvc_Python/article/details/164138444</guid><author>Vvc_Python</author><pubDate>Fri, 28 Aug 2026 09:59:19 +0800</pubDate><description><![CDATA[线程最直接的理解就是轻量级进程，它是一个基本的CPU执行单元，也是程序执行流的最小单元，由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体，是被系统独立调度和分派的基本单位，线程自己不拥有系统资源，只拥有一点儿在运行中必不可少的资源，但。。由于线程之间相互制约，致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。]]></description><category></category></item></channel></rss>