ARM裸机开发-PWM

嵌入式底层(1) 嵌入式底层(1) 文章目录嵌入式底层(1)前言一、ARM基础二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、ARM基础 不同的ARM体系采用不同的指令集 哈弗结构是数据和指令分开存储并行的 冯诺依曼结构是混合存储的 二、使用步骤 1.引入库 代码如下(示例): import numpy . 阅读详情

目录

一.背景

PWM原理

二.寄存器

PWMCR

FWM(bit27:26):

POUTC(bit19:18):

CLKSRC(bit17:16):

PRESCALER(bit15:4):

REPEAT(bit2:1):

EN(bit0):

PWMSR

FE(bit3):

PWMIR

FIE(bit0):

PWMSAR

PWMPR

三.代码实现


一.背景

        不管是使用显示器还是手机,其屏幕背光都是可以调节的,通过调节背光就可以控制屏幕的亮度。在户外阳光强烈的时候可以通过调高背光来看清屏幕,在光线比较暗的地方可以调低背光,防止伤眼睛并且省电。 我们使用的开发板LCD 有一个背光控制引脚,给这个背光控制引脚输入高电平就会点亮背光,输入低电平就会关闭背光。假如我们不断的打开和关闭背光,当速度足够快的时候就不会感觉到背光关闭这个过程了。这个正好可以使用 PWM 来完成,PWM 全称是 Pulse Width Modulation,也就是脉冲宽度调制,本质上来说PWM的目的就是产生一个方波。
        PWM 信号有两个关键的术语:频率和占空比,频率就是开关速度,把一次开关算作一个周期,那么频率就是 1 秒内进行了多少次开关。占空比就是一个周期内高电平时间和低电平时间的比例,一个周期内高电平时间越长占空比就越大,反之占空比就越小。占空比用百分之表示,如果一个周期内全是低电平那么占空比就是 0%,如果一个周期内全是高电平那么占空比就是100%。
        我们给 LCD 的背光引脚输入一个 PWM 信号,这样就可以通过调整占空比的方式来调整LCD 背光亮度了。提高占空比就会提高背光亮度,降低占空比就会降低背光亮度。重点就在于PWM 信号的产生和占空比的控制,很幸运的是,I.MX6U 提供了 PWM 外设,因此我们可以配置 PWM 外设来可以方便地产生PWM 信号。

imx6ull将PWM封装为外设

PWM原理

此图有三个中断,周期寄存器的回滚中断,采样寄存器的比较中断,以及FIFO缓冲区的空槽中断。此处只用FIFO中断,每次从FIFO中取数到采样寄存器,决定了占空比(该FIFO深度为4,即存放4个16位数),当FIFO缓冲区的数据被取到空的阈值时产生中断,在中断处理函数中再往FIFO里重新装入数据,以下实现的代码基于此。

计数寄存器自增到和采样寄存器比较,相等则将PWM电平翻转,后续再和周期寄存器的值比较,相等则翻转电平,同时从0开始重新计数自增,重复此过程,和采样寄存器比较,再和周期寄存器的值比较,相等就翻转电平,并回滚为0.

二.寄存器

PWMCR

FWM(bit27:26):
FIFO 水位线,用来设置 FIFO 空余位置为多少的时候表示 FIFO 为空。设置为 0 的时候表示 FIFO 空余位置大于等于 1 的时候 FIFO 为空;设置为 1 的时候表示 FIFO 空余位置大于等于 2 的时候 FIFO 为空;以此类推。

队列有四个数,设置FWM位为01,当队列有两个空槽时置1

POUTC(bit19:18):

00表示回滚点高电平,比较点低电平,01相反,即设置起始的默认电平。

我们设置为 0,也就是一开始输出高电平,当计数器值和采样值相等的话就改为低电平,这样采
样值越大高电平时间就越长,占空比就越大;

如下图

CLKSRC(bit17:16):
PWM 时钟源选择,为 0 的话关闭;为 1 的话选择 ipg_clk 为时钟源;为 2 的话选择 ipg_clk_highfreq 为时钟源;为 3 的话选择 ipg_clk_32k 为时钟源。我们设置为 1,也就是选择ipg_clk 为 PWM 的时钟源,因此 PWM 时钟源频率为 66MHz;
PRESCALER(bit15:4):
分频值,可设置为 0~4095,对应着 1~4096 分频。我们设置为65,就是66分频,PWM实际工作频率为1MHz;
REPEAT(bit2:1):
重复采样设置,此位用来设置 FIFO 中的每个数据能用几次。可设置 0~3分别表示 FIFO
中的每个数据能用 1~4 次。本章我们设置为 3,即 FIFO 中的每个数据用8次;

EN(bit0):
PWM 使能位,为 1 的时候使能 PWM,为 0 的时候关闭 PWM

PWMSR

这个寄存器是状态及标志寄存器
FE(bit3):
FIFO 到达水位线标志,为 1 的时候表示 FIFO 已到达水位线。我们主要在中断中关注这个标志,
并及时清零;

PWMIR

这个是 PWM 的中断控制寄存器
FIE(bit0):
FIFO 空中断,为 1 的时候使能,为 0 的时候关闭。我们需要使能这个中断

PWMSAR

设置PWM的占空比,即采样寄存器

PWMPR

设置PWM周期,即周期寄存器

三.代码实现

float global_ratio = 1.0;

// 设置占空比
void set_ratio(void)
{
    int i = 0 ;

    for (i = 0; i < 4; i++)
    {
        PWM1->PWMSAR = PWM1->PWMPR * global_ratio;
    }
}


void pwm1_interrupt_handler(void)
{
    if ((PWM1->PWMSR & (1 << 3)) != 0)
    {
        set_ratio();
        PWM1->PWMSR |= (1 << 3);
    }
}

// pwm1初始化
void pwm1_init(void)
{
    // 1. pwm引脚复用
    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO08_PWM1_OUT, 0);
    // 2. pwm引脚电气属性
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO08_PWM1_OUT, 0xB9);

    PWM1->PWMCR = 0;
    PWM1->PWMCR |= (1 << 26) | (1 << 16) | (65 << 4) | (3 << 1);
    PWM1->PWMIR |= (1 << 0);
    PWM1->PWMPR = 998;
    set_ratio();

    // 注册pwm中断
    system_interrupt_register(PWM1_IRQn, pwm1_interrupt_handler);
    // 设置pwm中断优先级
    GIC_SetPriority(PWM1_IRQn, 0);
    // 使能pwm中断
    GIC_EnableIRQ(PWM1_IRQn);

    // 使能PWM
    PWM1->PWMCR |= (1 << 0);
}

嵌入式PWM风扇控制实战:ARM开发板驱动与多外设协同 PWM(脉冲宽度调制)是嵌入式系统中控制模拟量的核心技术,通过调节数字信号的占空比来等效输出不同电压,广泛应用于电机调速、LED调光等场景。其原理基于定时器产生固定频率的方波,改变高电平时间比例以实现精准控制。在工程实践中,PWM常与GPIO、定时器、中断等模块协同,实现高效的外设驱动。本文以ARM Cortex-M开发板控制轴流风扇为例,详解如何通过按键触发PWM输出,并结合串口通信与LCD显示构建实时监控系统,涵盖硬件连接、软件架构及调试要点,为嵌入式综合应用提供实践参考。 阅读详情

相关推荐

ARM裸机开发入门:GPIO控制与LED实战指南

嵌入式开发中,GPIO(通用输入输出)是最基础且重要的外设接口,它通过寄存器映射机制实现与硬件的直接通信。ARM架构凭借其精简指令集(RISC)设计,在GPIO操作上展现出高效能比优势,通常只需2-3条指令即可完成引脚控制。裸机开发环境下,开发者需要直接配置控制寄存器来操纵GPIO模式(输入/输出)和状态,这种底层硬件编程能力是嵌入式系统开发的核心技能。通过LED控制这一经典案例,开发者不仅能掌握GPIO寄存器操作、时钟树配置等关键技术,还能学习电路设计、调试方法等工程实践知识。本文以STM32为例,详细解

weixin_29194255的博客 250

嵌入式ARM方向毕设实战:从裸机开发到RTOS任务调度的完整实现

通过这个从裸机到FreeRTOS的温控系统实战,我们不仅实现了一个功能完整的项目,更重要的是掌握了一套模块化、解耦的嵌入式开发方法。外设驱动被封装成独立的模块,任务各司其职并通过安全的机制通信,调试也有了更专业的工具和思路。这套代码结构清晰、注释完整,稍作修改就能应用到其他类似的项目中,比如智能小车、环境监测站等,绝对是毕设的加分项。

2600_94960101的博客 325

ARM裸机-17(定时器、看门狗)

1、什么是定时器(Timer); 2、S5PV210中的定时器; 3、S5PV210的PWM定时器1; 4、S5PV210的PWM定时器2; 5、S5PV210的PWM定时器3; 6、蜂鸣器和PWM定时器编程实践1; 7、蜂鸣器和PWM定时器编程实践2; 8、看门狗定时器; 9、看门狗定时器的编程实践; 10、实时时钟RTC; 11、RTC编程实战

m0_57368670的博客 284

ARM裸机开发:浮点数和整数运算精度复习,PWM脉冲宽度调制背光

(四)set_ratio函数:设置PWM占空比,每调用一次写4个数到FIFO,当FIFO小于等于2时产生中断继续调用函数向FIFO中写4个占空比先存起来了。(一)原理:利用 PWM 输出的高低电平占空比,控制背光驱动电路的平均电流 / 电压,从而改变背光亮度(占空比越高,平均功率越大,亮度越高;有效位数为 52 位(约 15-17 位十进制),可精确表示所有 32 位整数,64 位整数可能丢失精度。有效位数为 23 位(约 6-7 位十进制),若整数超过 2^23(8388608),会丢失精度。

2501_91498265的博客 990

Mini2440裸机开发:GPIO控制LED实战指南

GPIO(通用输入输出)是嵌入式系统中最基础的外设接口,通过配置寄存器可直接控制硬件引脚电平状态。其工作原理是通过设置控制寄存器选择引脚功能模式(输入/输出/复用),再操作数据寄存器改变电平。在ARM架构中,S3C2440等处理器通过内存映射方式访问GPIO寄存器,这种底层控制方式具有实时性高、资源占用少的特点,特别适合裸机开发场景。以LED控制为例,开发者需要理解共阳极/共阴极电路设计,掌握GPIO初始化、电平设置等核心操作。本文以Mini2440开发板为硬件平台,详细演示如何通过汇编和C语言实现LED闪

weixin_28716769的博客 228

中鸣RMU裸机C开发:从传感器采样到PID循迹的嵌入式实践

嵌入式C语言是面向微控制器底层开发的核心技能,其本质在于直接操作硬件寄存器、管理有限资源并构建确定性实时逻辑。理解裸机启动流程、外设时钟配置、ADC采样时序与中断优先级,是实现稳定轨迹识别的前提;而灰度传感器数据滤波、加权重心法偏差计算、位置式PID闭环控制,则构成了智能小车自主循迹的技术主干。这类工程不依赖操作系统或高级框架,强调对MCU(如STM32F103)硬件行为的精确掌控,广泛应用于机器人竞赛、工业控制教学及IoT终端开发。本文以中鸣超级轨迹赛为典型场景,详解基于ARM Cortex-M3的裸机C

weixin_30954817的博客 224

【ARM 裸机开发 (IMX6ULL-mini)】PWM 背光调节与 GT9147 多点触摸驱动

本文基于 IMX6ULL-mini 裸机开发,实现 LCD 背光 PWM 调光与 GT9147 电容触控驱动。介绍 IMX6ULL PWM 模块原理、引脚复用及寄存器配置,借助 FIFO 中断动态调整占空比,控制屏幕亮度。基于 I2C2 通信驱动 GT9147,完成芯片复位、ID 识别与触控中断配置,读取多点触摸坐标并在 LCD 上显示,完成显示与触控基础裸机驱动。

2403_89702754的博客 854

Claude Code VSCode集成开发指南:AI编程助手完整配置

Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。

2501_93058131的博客 5983

嵌入式arm(五)裸机编程之简单的使用{看门狗}{PWM}{ADC}快速练习

使用开发板:FS4412,Soc:Exynos4412,内核型号:cortex-A9,架构:armv7; 文档:开发板原理图,Soc数据手册; 环境:文件编写及编译:Linux;下载程序:超级终端hypertrm;串口下载 编译器:交叉编译器arm文章目录一 看门狗定时器1 什么是看门狗定时器1.1 看门狗是啥?1.2 看门狗有什么用?2 看门狗的使用2.1 查硬件电路2.2 查寄存器2.3 编程二 PWM驱动无源蜂鸣器1 粗略提一点概念2 查硬件电路3 查寄存器4 编程三 ADC的简单使用1 简单描述2

bai_3525的博客 1101

Android12 车载开发TaskView实现分屏

这里只给出TaskView的代码,相关联的源码,请看源码,如果想要使用TaskView需要自己去编译frameWork的源码,打包一个aar,或者jar出来使用,否则无法直接使用。1.如果分屏的应用如启动两个应用按照权重占比,互相不叠加在一起,点触摸击事件都可响应,例如左边启动QQ了,右边启动的是微信,二者窗口都可操作。TaskView是谷歌整合安卓多任务多窗口下交互重新重构的独立出来的module,本身继承自ServiceView,TaskView的相关概念性的东西参考。//创建的taskview。

android_bird_bird的博客 9551

获取上传至DMS服务器上文件的URL

如果需要失效时间延长会设置URL永久有效, 可以去修改函数SCMS_URL_GENERATE的参数DURATION 或EXPIRATION ,DURATION最大时间是999999,若需要永久有效,则需要设置EXPIRATION的时间,这时系统会忽略DURATION的参数,生成URL的时候 SCMS_URL_GENERATE会调用SCMS_URL_SIGN函数这是其中默认这是了URL的生效时间为两小时。

一只学习的渣渣 541

ARM结构体系和接口技术

本章节表述,arm和的基础理论和arm裸机编程。

qq_50778020的博客 1189

CCS配置MSPM0G3507(七) 编码器(TIMER-QEI)

1.选择时钟源 BUSCLK2.时钟分频配置为1分频3.分频系数配置为14.若勾选 Start ,则生成程序后会自动开启定时器的计数,否则需手动在程序中开启5.Load Value 设置为65535。

kaneki_lh的博客 1万+

s3c2440学习笔记(上)-基于FL2440

1  2440启动文件分析 由于启动文件无法仿真,可以再要判断的语句的地方加上一段点亮led小灯程序 ResetHandler ;系统上电或复位后,由0x0处的跳转指令,跳转到该处开始真正执行系统的初始化工作   2  2440外部中断 2440的外部中断引脚EINT与通用IO引脚F和G复用,要想使用中断功能,就要把相应的引脚配置成中断模式,如我们想把端口F0设置成外部中断,而其他引脚功

luoxn28的专栏 1366

Jetson-nano 编译实时内核并烧录

前言 之前一篇文章介绍了正常的烧录过程,使用的是默认内核,实际工作中需要对内核打补丁升级为实时内核,并对其重编译。 一、准备内容 官网大法好 官方内核下载链接 官方交叉编译器下载链接 官方文档 ubuntu主机一台 根据官网选择下载对应的文件, 1、L4TDriver Package (BSP) source jetson内核文件。 2、官方交叉编译器 因为我们不是在jetson上直接编译,而jetson是arm平台,所以要进行交叉编译。 二、使用步骤 1.解压 内核 tar -xjf public_s

ldl371122的博客 3287

单细胞多组学数据整合分析实战:从原始数据到跨平台合并

本文详细介绍了单细胞多组学数据整合分析的实战流程,从原始数据处理到跨平台合并分析。通过Seurat和Harmony等工具的应用,帮助研究者有效解决批次效应问题,保留真实的生物学信号。文章包含代码示例和常见问题解决方案,特别适合需要进行单细胞合并分析的研究人员参考。

weixin_30752699的博客 90

ARM体系结构

ARM体系结构一、预备知识1.1、计算机系统组成二、ARM公司简介2.1、ARM公司2.2、ARM全球分布2.3、ARM公司合作伙伴2.4、ARM产品应用2.5、ARM处理器的最新发展三、系统设计3.1、嵌入式和单片机的区别3.2、★SOC3.3、AMBA四、ARM编程模型4.1、数据和指令类型4.2、★工作模式4.3、★寄存器4.4、异常4.5、大小端五、ARM汇编指令集5.1、为什么要学习汇编5.2、模拟器编译环境搭建5.3、编译5.4、★ARM汇编指令5.5、协处理器指令5.6、ARM汇编伪指令5.7

子羽丿_的博客 1万+

基于R-CNN深度学习的常见手势识别系统:数据集、模型和UI界面的完整实现

卷积神经网络(CNN):用于从图像中提取特征。区域提议网络(RPN):用于生成可能包含手势的候选区域。:将候选区域调整为固定大小,并进行进一步的分类和回归。接下来,我们需要加载一个预训练的Faster R-CNN模型,并对其进行微调。我们将使用# 加载预训练的Faster R-CNN模型# 获取分类器的输入特征数# 替换分类器头部,设置为我们数据集的类别数(假设有5类手势)

YOLO 1000

ARM裸机开发:时钟配置、定时器epit、gpt

(一)晶振为24MHZ,通过PLL锁相环电路来倍频,通过PFD来分频,还有一个既可以分频又可以倍频的电路。2.在528 PLL中选择浅蓝色路径,先配置AHB再配置IPG,在配置PERCLK。2.PLL2(528 PLL):又称system PLL固定528MHZ。3.PLL3(480 PLL):又称USB1 PLL固定480MHZ。4.PLL 4(Audio PLL):用于音频设备。5.PLL 5(Video PLL):视频相关配置。(三)528 PLL配置和480 PLL配置。

2501_91498265的博客 703

华为OD机试双机位C卷-组装新的数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【组装新的数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 组装新的数组。

qq_45776114的博客 1145

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

wl_arm实战入门:从零实现第一个LED控制程序

通过wl_arm平台,从零开始搭建开发环境,完成第一个LED控制程序的编写与烧录,深入理解嵌入式开发基础流程,体验wl_arm在实际项目中的应用魅力。

weixin_34392511的博客 292

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

10元级ARM+FPGA协同开发平台设计

ARM与FPGA异构协同是嵌入式系统实现实时控制与并行处理的关键技术路径。其核心原理在于ARM承担顺序逻辑调度与协议管理,FPGA执行确定性时序逻辑与硬件加速,二者通过SPI等片间总线完成数据握手与功能互补。该架构显著提升系统在PWM生成、频率测量等场景下的精度与响应性,同时降低对高端处理器的依赖。典型应用涵盖电机控制、传感器信号调理及教学实验平台构建。本文聚焦低成本国产芯片组合(STM32F103C6T6+AG1280),深入解析SPI主从通信、32位帧同步、裸机驱动与Verilog状态机实现等工程细节,

e4f5g6h的博客 901

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

020.PWM呼吸灯&链接器对齐踩坑|千篇笔记实现嵌入式全栈/裸机篇

摘要 本文介绍了在Mini2440开发板上实现PWM呼吸灯的过程。通过硬件改造将蜂鸣器电路改为LED电路,并利用S3C2440的Timer0 PWM功能实现呼吸效果。文章详细分析了PWM配置要点,包括引脚复用、频率和占空比设置,并提供了完整的代码实现。在调试过程中发现并解决了链接器段对齐问题,提出了两种解决方案:文本段尾部对齐或显式指定数据段加载地址对齐。最终成功实现了平滑的呼吸灯效果,为裸机开发中的PWM应用提供了实践参考。

独小乐的博客 346

从Amazon Dash按钮到STM32裸机开发:低成本硬件改造与嵌入式编程实战

嵌入式系统开发的核心在于对微控制器(MCU)的底层控制,这通常通过裸机编程(Bare-Metal Programming)实现。与依赖高级框架的开发方式不同,裸机编程要求开发者直接操作硬件寄存器,从而实现对系统资源的极致掌控和性能优化。其技术价值在于能够深入理解计算机体系结构、中断机制和实时系统原理,是构建高性能、低功耗物联网(IoT)设备的基础。在消费电子领域,许多设备的核心正是基于ARM Cortex-M内核的微控制器,这为硬件爱好者提供了丰富的改造平台。例如,通过对Amazon Dash按钮这类低成本

weixin_33701617的博客 472

ARM平台裸机程序设计:从零实现简单应用

在ARM平台上手写裸机程序,不依赖操作系统,直接操控硬件寄存器完成功能开发。通过汇编与C混合编程,实现LED控制、串口输出等典型嵌入式任务,夯实ARM平台底层开发能力。

weixin_35414260的博客 374

嵌入式常用外设 LCD、PWM、ADC 与 SPI 核心知识点汇总

本文梳理嵌入式开发四类核心外设知识,涵盖 RGB LCD 的色深格式、并行接口、行场同步时序、eLCDIF 控制器与显存配置;PWM 脉冲宽度调制的频率、占空比、极性原理及调光应用;ADC 模数转换的逐次逼近原理、参数换算与寄存器配置;SPI 通信的 CPOL/CPHA 时序模式与主从读写机制,覆盖硬件架构与时序配置要点。

2601_96618230的博客 575
上一篇: ARM裸机开发-LCD
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值