嵌入式硬件学习
文章平均质量分 69
剑指offer.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ARM裸机开发-PWM
本文介绍了基于I.MX6UL开发板的LCD背光亮度控制方法,利用PWM(脉宽调制)技术通过调节占空比实现背光亮度调节。通过配置PWM外设寄存器,设置时钟源、分频系数和周期值,结合FIFO中断机制动态更新采样值,实现占空比可调的PWM信号输出。代码中通过中断服务函数实时更新占空比,确保背光亮度平滑调节,有效提升显示体验并节省功耗。原创 2026-10-06 13:39:55 · 606 阅读 · 0 评论 -
ARM裸机开发-LCD
本文介绍了基于imx6ull的RGB LCD显示屏(ATK4384,800×480)的显示原理与初始化实现。通过分析分辨率、屏幕尺寸、像素颜色深度及同步信号(PCLK、HSYNC、VSYNC、DE),计算得出60Hz刷新率下像素时钟约为31MHz。硬件初始化包括设置引脚复用功能和电气属性,确保各信号线正确配置,为后续图像显示奠定基础。原创 2026-10-05 22:50:38 · 192 阅读 · 0 评论 -
ARM裸机开发-SPI
SPI(串行外设接口)是Motorola定义的高速、全双工、同步串行通信协议,仅需四根线(SCLK、MOSI、MISO、CS),广泛用于EEPROM、传感器等设备。其通信模式由CPOL和CPHA决定,共四种工作模式。本文以IMX6ULL平台为例,介绍了SPI3通道的引脚复用配置、寄存器设置及初始化流程,并实现ADXL345传感器的读写操作,通过发送寄存器地址与占位字节完成数据交互,验证了SPI在嵌入式系统中的高效应用。原创 2026-10-04 00:30:35 · 342 阅读 · 0 评论 -
ARM裸机开发-ADC
本文介绍了IMX6ULL芯片中ADC外设的工作原理与配置方法,包括采样、量化及分辨率概念,重点阐述了基于逐次逼近法的12位ADC实现。通过寄存器配置(如时钟分频、基准电压选择、通道设置等)完成引脚复用与电气属性设置,并实现校准、单次转换读取及模拟值转换。代码示例展示了初始化、校准、读取原始数据及转换为实际电压的过程,最终输出0~3.3V范围内的精确模拟信号值。原创 2026-09-29 01:21:43 · 424 阅读 · 0 评论 -
ARM裸机开发-I2C-LM75
本文基于i.MX6ULL平台,实现LM75温度传感器的I2C通信读取。通过改进寄存器地址与长度的定义(使用unsigned short和int),提升代码通用性。采用Linux I2C核心层架构,封装i2c_transfer接口,通过master_xfer函数统一调用底层适配器驱动,实现跨芯片兼容。最终通过读取2字节温度数据并右移7位,计算得温度值,精度达0.5℃,验证了驱动分层设计的高效性与可移植性。原创 2026-09-28 15:26:24 · 391 阅读 · 0 评论 -
ARM裸机开发-I2C-E2PROM
本文介绍了I2C通信协议的基本原理与AT24C02 EEPROM的使用,涵盖I2C时序、设备地址与寄存器地址区别、硬件配置(引脚复用、上拉电阻)及基于IMX6ULL的I2C读写实现。通过配置I2C1时钟分频、电气属性,并编写初始化与读写函数,实现了对AT24C02的读写操作,重点说明了起始/停止信号、应答机制及重发设备地址的读时序流程。原创 2026-09-27 23:45:35 · 418 阅读 · 0 评论 -
ARM裸机开发-UART
本文介绍基于IMX6ULL平台配置CH340C串口通信的实现过程。通过设置IOMUXC引脚复用与电气属性,启用UART1收发功能;利用UCR2、UCR3、UFCR寄存器及UBMR/UBIR计算115200波特率;编写putc、puts、getc函数实现字符发送与接收;最终导入stdio库,通过scanf与printf实现数据交互,结合VOFA软件完成串口通信调试。原创 2026-09-27 00:58:17 · 444 阅读 · 0 评论 -
ARM裸机开发-EPIT与GPT
和 t3 这三个时刻会触发按键中断,每次进入中断处理函数我们都重新开器定时器中断,所以会在 t1、t2和 t3 这三个时刻开器定时器中断。接下来我们学习如何使用定时器来实现按键消抖,使用定时器既可以实现按键消抖,而且也不会浪费CPU 性能,这个也是 Linux 驱动里面按键消抖的做法。中间为计数器,装入初值,每减一次与比较寄存器比较,若比较成功,ITIF置1(中断标记位),(最后记得清零),此时若ITIE为1(中断使能位),则通过与门为真,发出中断,同时,Load加载寄存器,给初值寄存器重新赋值。原创 2026-09-26 18:03:23 · 480 阅读 · 0 评论 -
ARM裸机开发-时钟
先采用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倍频因子。下图为该芯片的时钟配置。原创 2026-09-25 22:09:11 · 500 阅读 · 0 评论 -
ARM裸机开发-中断
可以读出GIC的基地址,不过可以通过Cortex-A7的固件库实现,即初始化GIC函数inline:内联函数,本质是函数,调用内联函数前,必须有该函数的定义,编译时,内联函数会在函数调用位置被展开,类似宏,就地展开,不用跳转函数,提高函数执行效率,可在头文件中定义函数。原创 2026-09-24 06:37:20 · 466 阅读 · 0 评论 -
ARM裸机开发-蜂鸣器与按键
显然底层源码通过宏定义,指定了对应的GPIOx的基地址,将GPIOx的基地址强转为GPIO_Type *的指针,而GPIO_Type则为定义了GPIO里的8个寄存器的结构体,如此即可通过GPIOx指针访问对应结构体成员的寄存器进行赋值。先是引脚的名字,再是引脚的具体复用功能,不同引脚具有不同的复用功能,如下图所示,上篇点亮LED灯对应的GPIO1_IO03引脚具有多个复用功能,而SNVS_TAMPER1则只有GPIO5_IO01的功能。显然CCM_Type结构体同GPIO一样,内部定义了对应的寄存器。原创 2026-09-22 12:56:01 · 512 阅读 · 0 评论 -
ARM裸机开发-点亮LED灯
本文开始在VScode上使用IMX6ULL以真机进行学习,芯片原理图参考如下。:这是整块板子的“大脑”。NXP(恩智浦)的 IMX6ULL 基于架构,主频通常在 528MHz 或 800MHz。:相当于电脑的。它是掉电丢失的。当 Linux 系统启动时,,它负责临时存放程序运行时产生的大量数据。:相当于电脑的。它是掉电不丢失的。用来永久存放系统镜像(uboot、kernel、设备树、rootfs文件系统)和用户程序。原创 2026-09-19 23:59:25 · 494 阅读 · 0 评论 -
ARM裸机开发-汇编基础
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,所以这个数不是立即数。原创 2026-09-18 00:59:30 · 435 阅读 · 0 评论
分享