EPIT定时器配置 uart 串口通信

嵌入式Linux下Modbus RTU串口通信实战:从termios配置到CRC校验 Modbus RTU是一种广泛应用于工业现场的串行通信协议,其核心在于严格时序控制、字节对齐与CRC-16校验。在嵌入式Linux环境中,由于系统非实时性、tty层缓冲机制及UART硬件FIFO限制,直接调用高级封装库(如pymodbus)极易引发帧撕裂、超时或CRC错误。理解termios结构体各标志位的真实物理含义——如关闭ICANON实现非行规约读取、禁用ISTRIP避免高位截断、显式设置CS8/CSTOPB匹配协议要求——是保障通信可靠性的基础。结合RS485收发方向精准同步、波特率实测校准与环形缓 阅读详情

EPIT原理图

1.epit是什么呢

EPIT(Enhanced Periodic Interrupt Timer)是 i.MX 系列处理器中的增强型周期中断定时器,本质上是一个向下计数的计数器。当计数减到 0 时,它会触发一次中断,从而实现周期性的定时功能。EPIT 常用于 LED 闪烁、任务调度、延时控制等需要精确时间基准的场景。

load register 这个寄存器会重新加载设定值 所以一般把计数寄存器和下载寄存器设置为一样的

然而计数器有两种计数模式

1.自由运行模式0xfffffff往下重新减

2.遗忘模式,(从加载寄存器中的数值往下减)

并且还有一个计数设计位

我们可以通过这样的设置配置一个一秒一亮的led灯

void epit1_interrupt_handler(void)
{
    if(EPIT1->SR&(1<<0)!=0)
    {
        led_nor();
    }
    EPIT1->SR |=(1<<0);
}
void epit1_init(void)
{
    EPIT1->CR = 0;
    EPIT1->CR |=(1<<24)|(1<<27)|(65<<4)|(1<<3)|(1<<2)|(1<<1);
    EPIT1->LR = 100000;
    EPIT1->CMPR = 0;

    //注册epit中断函数
    system_interrupt_register(EPIT1_IRQn , epit1_interrupt_handler);
    //设置epit1中断优先级
    GIC_SetPriority(EPIT1_IRQn, 1);
    //gic使能epit1中断
    GIC_EnableIRQ(EPIT1_IRQn);

    //开启epit定时器
    EPIT1->cr |=(1<<0);

}

以上是主要核心代码:我们外加了中断优先级设置,还有gic使能中断函数

gic使能中断函数作用:

GIC(Generic Interrupt Controller,通用中断控制器)是 ARM 处理器中负责管理中断的核心外设。GIC_EnableIRQ(EPIT1_IRQn) 的作用是把 EPIT1 定时器产生的中断信号从 GIC 层面“放行”,使其能够被 CPU 内核接收并触发对应的中断服务程序。

具体来说,EPIT 定时器计数到 0 时会产生一个中断请求,但这个请求必须先经过 GIC 的使能开关。如果不调用 GIC_EnableIRQ,即使 EPIT 本身已经配置好并开启了中断,CPU 也收不到这个中断信号,中断服务函数 epit1_interrupt_handler 就不会被调用,LED 也就无法按预期闪烁。

因此,GIC_EnableIRQ 是整个中断链路中“最后一公里”的开关,只有它被使能后,前面配置的 EPIT 定时器、中断优先级和中断注册才能真正生效。

2.EPIT:消除抖动

并联一个电容的作用

GPT精准的延时

自增计数器-运用数据总线进行读取数据降rov寄存器变为1,在通过与门控制中单发生

UART 串口通信

void uart1_init(void)
{
    // 配置串口引脚功能
    IOMUXC_SetPinMux(IOMUXC_UART1_TX_DATA_UART1_TX, 0);
    IOMUXC_SetPinMux(IOMUXC_UART1_RX_DATA_UART1_RX, 0);

    // 配置串口引脚电气属性
    IOMUXC_SetPinConfig(IOMUXC_UART1_TX_DATA_UART1_TX, 0x10B0);
    IOMUXC_SetPinConfig(IOMUXC_UART1_RX_DATA_UART1_RX, 0x10B0);

    // 失能UART
    UART1->UCR1 &= ~(1 << 0);
    // 复位UART
    UART1->UCR2 &= ~(1 << 0);
    // 忽略RTS引脚
    UART1->UCR2 |= (1 << 14);
    // 无校验
    UART1->UCR2 &= ~(1 << 8);
    // 1位停止位
    UART1->UCR2 &= ~(1 << 6);
    // 8位数据位
    UART1->UCR2 |= (1 << 5);
    // 允许串口发送数据
    UART1->UCR2 |= (1 << 2);
    // 允许串口接收数据
    UART1->UCR2 |= (1 << 1);
    // 交叉模式
    UART1->UCR3 |= (1 << 2);
    // 设置1分频
    UART1->UFCR = (5 << 7);
    // 设置115200波特率
    UART1->UBIR = 999;
    UART1->UBMR = 43402;
    // 使能UART
    UART1->UCR1 |= (1 << 0);
}

void putc(unsigned char ch)
{
    while ((UART1->USR2 & (1 << 3)) == 0);

    UART1->UTXD = ch;
}

问题总结

1. 什么是UART?

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种串行通信协议,通过 TX(发送)和 RX(接收)两根信号线实现设备间的异步数据传输。它不需要时钟线,通信双方需约定相同的波特率,常用于单片机与电脑、传感器、蓝牙模块等设备之间的通信。

2. 什么是EPIT?

EPIT(Enhanced Periodic Interrupt Timer,增强型周期中断定时器)是 i.MX 系列处理器中的向下计数定时器。当计数值减到 0 时触发一次中断,从而实现周期性定时功能。它常用于 LED 闪烁、任务调度、延时控制等需要精确时间基准的场景。

3. 什么是GPT?

GPT(General Purpose Timer,通用定时器)是一种自增计数器,通过数据总线读取计数值,可用于高精度延时、输入捕获和输出比较等场景。相比 EPIT,GPT 的计数精度更高,适合对时间精度要求更严格的延时控制。

4. 什么是输入捕获和输出比较?

输入捕获(Input Capture)是指定时器在外部信号发生跳变(上升沿或下降沿)时,自动记录当前计数值,用于测量脉冲宽度、频率或周期。输出比较(Output Compare)是指当计数值与预设的比较值相等时,自动翻转或置位某个输出引脚,用于产生精确的方波、PWM 信号或定时触发外部设备。

【Codex安装使用手册】 Codex安装部署使用教程 阅读详情

相关推荐

SoC 验证老兵手册

《SoC验证老兵手册》摘要: 针对大型SoC系统级验证,手册提出Cache+DMA场景的高效验证方案。核心方法采用C测试用例(模拟Linux/RTOS真实场景)触发隐蔽bug,配合SV Checker精准捕捉硬件问题(如DMA读取脏缓存行)。特别强调验证方法论:C用例负责复杂行为模拟,SV专注RTL正确性检查;利用Linux天然并发性暴露硬件缺陷。手册还包含模拟面试攻防技巧,指出验证架构师需具备定义Stimulus/Checker边界的能力。终极判断标准:未通过Linux下Cache+DMA+SMP+中断测

元直的博客 1370

【linux-IMX6ULL-定时器-GPT-串口配置流程-思路】

主要对IMX6ULL的三部分EPIT定时器、GPT定时器、及UART的这些外设的配置进行了简要的说明,并且对定时器+按键消抖和定时器高精度的延时进行了简要的分析,同时通过异或的结合律可以方便的检测串口通信的奇偶校验

w384829981的博客 1474

数据中心GPU芯片性能参数速查表(Nvidia+国产算力卡)

本文提供了一份数据中心GPU芯片性能参数速查表,涵盖Nvidia与国产算力卡两大阵营。文章详细解读了算力、显存、互连技术及功耗等关键性能指标,并对比了A100、H100、昇腾910B等主流型号,旨在帮助用户根据AI训练、推理等实际场景,做出高效的硬件选型与成本评估决策。

a0b1c2d3的专栏 835

ARM-day07 EPIT GPT UART

1. 什么是EPIT,什么是GPT?GPT(General Purpose Timer)通用定时器EPIT(Enhanced Periodic Interrupt Timer)增强型周期中断定时器2. EPIT和GPT是多少位定时器?向上计数还是向下计数?

2603_94884451的博客 229

【开关电源】开关电源实战经验分享

开关电源原理设计、Layout设计经验分享

weixin_42098658的博客 4169

MATLAB闪退别慌!5分钟搞定Windows系统预设文件修复(附详细截图)

本文针对MATLAB在Windows系统下频繁闪退的问题,提供了快速有效的解决方案。核心在于修复或重置损坏的MATLAB预设文件,通过图文并茂的五步法,指导用户定位AppData目录、重命名预设文件夹,从而让MATLAB自动生成全新配置以解决闪退。文章还涵盖了问题诊断、设置备份及进阶排查方法,帮助用户彻底根除启动故障。

weixin_29234423的博客 925

ARM Day07 学习笔记:从 EPIT/GPT 定时器到 UART 串口通信

今天笔记里推了一下波特率的配置公式,算出来 (UBMR+1)/(UBIR+1) 约等于 43402.7,最后把 UBIR 设成 999,UBMR 设成 43402,完美对上 115200 的波特率。而输出比较呢,正好反过来,是用来往外发信号的。总的来说,今天算是把嵌入式系统里最底层的两件事搞明白了:一个是时间的精准控制(EPIT 和 GPT),另一个是数据的可靠传输(UART)。比如咱们今天提到的按键消抖,机械按键按下去会有抖动,用 EPIT 做个精确的 10ms 延时,就能把这部分抖动滤掉。

2602_96624055的博客 270

matlab相机标定_实战 | 相机标定

点击“计算机视觉life”关注,置顶更快接收消息!本文阅读时间约5分钟什么是相机标定?我们为什么需要相机标定?相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系统后续工作的准确性。坐标系相机标定涉及到了四大坐标系,分别为:像素坐标系图像物理坐标系相机坐标系世界坐标系为了进行相机标定,必须已知世界坐标系中足够多的三维空间点坐标,找到这些空间点在图像中投影点的二维图像坐标,并建...

weixin_39747334的博客 764

IMX6ULL 学习笔记:UART串口与定时器(EPIT/GPT)

UART为异步串行通信接口,通过TX/RX线实现设备间数据传输,常见配置为115200波特率、8位数据、无校验、1位停止位。支持硬件流控RTS/CTS防丢包,适用于工业环境。IMX6ULL中,EPIT为32位自减定时器,用于消抖与延时;GPT为自增型定时器,支持输入捕获(测脉冲周期)和输出比较(生成PWM),广泛用于电机控制与信号测量。

2502_90211789的博客 419

大模型在心律失常预测及治疗方案制定中的应用研究报告

目录一、引言1.1 研究背景与意义1.2 研究目的与方法1.3 研究创新点二、大模型技术概述2.1 大模型基本原理2.2 常见大模型类型及特点2.3 大模型在医疗领域的应用现状三、心律失常的术前预测与准备3.1 术前心律失常预测的重要性3.2 大模型在术前预测中的应用案例3.3 基于预测结果的术前准备方案四、术中监测与实时调整4.1 术中监测心律失常的方法与技术4.2 大模型辅助术中决策的机制4.3 实时调整手术方案的策略与实践五、术后恢复与并发症风险预测5.1 术后心律失常的监测与评估5.2 大模型预测术

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1596

【报错】(pycharm运行程序)OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading

1 报错 OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading 2 分析原因 通过 activate Distance 进行自己创建的 Distance 虚拟环境中,输入python会显示环境中python的版本信息,再依次import,显然不会报错。 这是因为在Anaconda的环境下有支持 import torch 的 dll,而在PyCharm中使用的是自己创建的新环境,还缺少相应支持的dll,仅需在PyCharm中配置环境变量。.

静谧、淡雅 8622

ARM定时器串口

发送时把并行数据转成串行帧(起始位+数据位+校验位+停止位)逐位发出;$$波特率 = \frac{参考时钟}{(UBMR + 1)} \times \frac{?}{(UBIR + 1)}\ (按讲义数值反推)$$方式:发送时轮询发送缓冲区空标志位,接收时轮询接收完成标志位(Linux下才用中断/DMA)。——检测到按键按下后,用定时器延时10~20ms再读一次电平,躲过抖动期。判断延时到(自增型计数器回绕时差值仍正确,用无符号减法)。原理:引脚上出现指定边沿(上升/下降沿)时,硬件。

2603_96623595的博客 174

【Java 实战】通过Redis实现购物车功能

以上就是今天要讲的内容,本文仅仅简单介绍了如何通过Redis实现购物车功能,以上方法亲测有效,希望能给大家一个参考。

~~~~~~~BUG FLY~~~~~~~~~ 9969

ARM学习笔记(7)

EPIT 是 32 位自减型定时器,计数范围 0x00000000 ~ 0xFFFFFFFF ,时钟源可以选 24 MHz,也可以选 32.768 KHz 的 RTC。GPT 最典型的应用是电机转速相关。频率是周期的倒数,反过来就能算出转速。输入捕获:从某个引脚捕获两次电平跳变之间的时间间隔,属于输入检测,一般用来测电机转速这类信号。输出比较:匹配到计数值之后,从引脚输出指定频率的方波,属于输出控制,一般用来控制电机转速。今天整理 day07 的笔记,主要是定时器和 UART 两块,挑几个关键点过一遍。

2401_88406318的博客 407

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

硬件(十一):EPIT、GPT、UART 外设配置

EPIT(Enhanced Periodic Interrupt Timer)是嵌入式处理器(如i.MX6ULL)内部的增强型周期性中断定时器,用于产生周期性中断、实现精准延时或对外部事件计数,可释放 CPU 资源,提升系统效率。GPT(General Purpose Timer)是通用定时器,可用于产生定时中断、实现延时功能,也能进行输入捕获(测量外部脉冲)和比较输出(控制引脚电平)等操作。

2302_80202237的博客 1122

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

imx6u-裸机学习笔记

正点原子imx6ullmin板学习

qq_49692308的博客 1461

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【ARM 裸机开发】EPIT/GPT 定时器详解与 UART 串口通信实战

EPIT为32位向下计数定时器,支持自由运行与重装载模式,适用于周期中断及软硬件消抖;GPT为32位向上计数定时器,具备输入捕获与输出比较功能,可实现精准延时、测速与PWM输出。UART结合Modbus协议构建单主多从通信拓扑,采用RS485差分传输与CRC校验提升抗干扰能力,配合RTS/CTS流控防止数据丢失,合理配置UBIR/UBMR寄存器确保115200bps等波特率精度。

2201_75490992的博客 467

IMX6ULL裸机开发:定时器(GPT/EPIT)与UART串口

讲解IMX6ULL两款核心定时器EPIT、GPT的原理与区别,解析输入捕获、输出比较功能,同时介绍UART串口通信原理、硬件流控、波特率配置与工业Modbus组网应用

weixin_57202813的博客 324

【IMX6ULL串口与定时器详解】UART/EPIT/GPT/输入捕获/输出比较 + 完整UART驱动源码

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器),是嵌入式最基础、最常用的异步串行通信协议。UART 采用两根线(TX发送、RX接收)实现设备间数据交互,无时钟线,依靠双方约定的波特率、数据位、校验位、停止位实现通信。EPIT(Enhanced Periodic Interrupt Timer,增强型周期中断定时器),是 IMX6ULL 专属的高精度递减型专用定时器。GPT。

2301_79651221的博客 164

IMX6ULL嵌入式开发深度解析:时钟、定时器与串口通信全攻略

本文深入解析i.MX6ULL嵌入式系统的三大核心模块:时钟系统、定时器和串口通信。时钟系统作为"心跳引擎",详细介绍了PLL锁相环、分频器等关键组件的工作原理及低功耗管理策略;定时器部分重点剖析EPIT和GPT定时器的寄存器配置与高级应用;串口通信章节则涵盖硬件架构、波特率计算及DMA传输优化。通过寄存器级编程示例和理论分析,提供了从基础到进阶的完整开发指南,特别强调时钟配置、精准定时、可靠通信的实现方法,并给出低功耗设计和实时性能优化的实践建议,为构建稳定可靠的嵌入式系统提供全面技术参

YangXY66的博客 826

i.MX6ULL 外设初始化

UART(Universal Asynchronous Receiver/Transmitter)是最常用的异步串行通信接口之一,在嵌入式调试和外设通信中应用广泛。EPIT(Enhanced Periodic Interrupt Timer)是增强型周期定时器,常用于周期性任务,例如 LED 闪烁、系统心跳信号等。GPT(General Purpose Timer)是通用定时器,可用于计时、延时、PWM 输出等场景。:通过 TXD(发送)、RXD(接收)完成数据通信。配置工作模式(时钟源、重载方式)。

m0_66592645的博客 619

ARM裸机开发 : i.MX6ULL裸机项目总览——从零搭建完整的嵌入式系统

启动流程:汇编向量表 → 系统初始化 → C语言main时钟系统:PLL/PFD/CCM 时钟树配置GPIO操作:引脚复用、方向控制、电平读写中断系统:GIC中断控制器、中断注册与分发定时器:GPT定时延时、EPIT周期中断串口通信:UART初始化、收发数据IIC初始化、收发数据工程管理:Makefile、链接脚本、烧录流程在后续博客中,我们将逐一深入讲解每个模块的原理和实现。

xxy22241的博客 137

ARM(11) - LM75

start.S 添加enable_fpu函数的执行流程遵循lm75.cmain.c。

m0_74911141的博客 491

10个完整汇编实例:排序、字符串与递归算法

本文提供10个16位实模式下可运行的汇编程序,涵盖冒泡排序、字符串反转、进制转换、阶乘与斐波那契计算等经典算法,附逐行解析。重点讲解寄存器使用、循环控制、栈操作、除法清零、符号比较、字符处理等核心技巧,揭示如PUSH/POP CX保全计数器、DIV前清DX、ASCII转换、溢出处理等关键细节。通过实践掌握底层逻辑,提升汇编编程能力。

软件工程师文艺 228

ARM 汇编调试入门:MOV、LDR 和 STR

掌握,最重要的是看清数据移动的方向。

ccddvvv的博客 180

汇编调试实战:DEBUG、Turbo Debugger、GDB 与 IDA

本文系统讲解汇编调试技巧,涵盖 DEBUG.exe 基础使用(寄存器查看、单步执行、内存操作)、Turbo Debugger 图形化调试,以及 GDB(32位Linux)和逆向工具(IDA/Ghidra)的高级应用。重点解析寄存器管理、断点设置、栈平衡检查与常见错误排查,如死循环、内存越界、栈崩溃等,强调静态分析识别函数边界、动态分析验证逻辑流程。掌握这些方法可高效定位底层缺陷,提升汇编开发能力。

软件工程师文艺 234
上一篇: arm时钟配置,pll锁相环与相关pfd分频的使用
下一篇: I2C 通信协议详解:时序、EEPROM 读写流程与实战总结
小诗懂技术
博客等级 码龄5年 20粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值