ARM裸机开发-UART

ARM裸机开发与UART驱动实现详解 UART(通用异步收发传输器)是嵌入式系统中最基础的串行通信接口,广泛应用于设备调试与数据交互场景。其工作原理基于起始位、数据位和停止位的时序组合,通过波特率同步实现可靠传输。在ARM架构中,PL011作为标准UART控制器,支持FIFO缓冲与中断触发机制,能显著提升通信效率。裸机开发环境下,直接操作硬件寄存器实现UART驱动,需要严格遵循初始化序列:包括波特率计算、数据格式配置和中断使能等关键步骤。通过轮询或中断方式处理数据收发,结合GIC(通用中断控制器)的中断优先级管理,可构建高实时性的通信系统。典型 阅读详情

目录

一.背景

二.实现

UCR2寄存器

UCR3寄存器

UFCR寄存器

UBIR与UBMR寄存器

USR2寄存器

UTXD寄存器

URXD寄存器

通信


一.背景

CH340C:TTL电平转USB电平

 DCDC芯片:隔离作用,防止CH340C芯片受到干扰,左侧为输入引脚,右侧为输出引脚,交叉连接,显然为DTE。

右侧输出端接4.7k下拉电阻,本次只需配置输入即可。

要配置输入引脚UART1 RXD和UART1 TXD,配置复用功能为串口收和发。同时电气属性配置默认值,能驱动串口即可。

    // 配置串口引脚功能
    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);

DTE设备:数据发到这就结束,交叉连接

DCE设备:不用数据,接收之后就发送,作为数据的中转站,收接收,发接发,直连

流控:

RTS_B : Request To Send ,请求发送,告诉对方本设备准备好接收数据了
CTS_B : Clear To Send ,清除发送,告诉对方暂停发送数据
防止缓冲区溢出,避免丢包
流控引脚本次设置用不上,驱动会用。

二.实现

UCR2寄存器

UCR3寄存器

UFCR寄存器

RefFreq为80MHZ,BaudRate比特率为11520,计算出UBMR与UBIR不唯一,符合条件即可

UBIR与UBMR寄存器

紫线为PLL3引脚,480MHZ,经过静态分频,除以6得到80MHZ

    // 设置115200波特率
    UART1->UBIR = 999;
    UART1->UBMR = 43402;

最后

    // 使能UART
    UART1->UCR1 |= (1 << 0);

USR2寄存器

UTXD寄存器

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

    UART1->UTXD = ch;
}
void puts(const char *p)
{
    while(*p)
    {
        putc(*p++);
    }
}

URXD寄存器

unsigned char getc(void)
{
    while((UART1->USR2&(1 << 0))==0);
    return UART1->URXD & 0xFF;
}

通信

输入A带\n则会读取\n为error

最后,导入stdio库函数,使用scanf和printf。

在用VOFA软件通信时,Windows给imx6ull发送数据时,imx6ull调用scanf函数进行回显,在VOFA中就显示了scanf的值

    //main函数中
    while (1)
    {
        scanf("%d %d",&a,&b);   //imx6ull发给windows,scanf回显给VOFA终端
        printf("%d + %d = %d\n",a,b,a+b);
    }

ARM裸机程序开发与实践 ARM(Advanced RISC Machines)架构处理器以其高性能和低功耗闻名于嵌入式系统领域。其精简指令集(RISC)设计和模块化设计使得它在移动设备、物联网(IoT)及多种嵌入式应用中得到了广泛应用。引导加载程序(Bootloader)是嵌入式系统启动时运行的第一个程序,它负责初始化硬件设备、建立内存空间映射图,为加载操作系统或其他应用程序准备环境。 阅读详情

相关推荐

Unity地形优化实战:LOD、合批与HLOD打造流畅开放世界

在计算机图形学与游戏开发中,渲染优化是保障应用流畅运行的核心技术。其基本原理在于通过算法与策略,在视觉保真度与硬件资源消耗之间寻求最佳平衡,旨在提升帧率、降低功耗。这一技术的核心价值在于,它直接决定了大规模场景(如开放世界游戏)在性能受限平台(尤其是移动设备)上的可行性。具体到地形渲染这一关键应用场景,开发者需要综合运用多层次细节(LOD)技术来动态调整模型精度,并通过Draw Call合批(Batching)与GPU实例化(GPU Instancing)来大幅减少CPU到GPU的通信开销。对于超大规模世界

weixin_28077113的博客 332

ARM裸机开发避坑指南:手把手教你用Exynos 4412实现UART串口回显(附完整源码)

本文详细介绍了在Exynos 4412开发板上进行ARM裸机开发时,如何正确配置UART串口通信并实现数据回显功能。从硬件连接到寄存器配置,再到实战代码和高级调试技巧,全面解析了串口通信中的常见问题及解决方案,帮助开发者快速避坑并提升开发效率。

weixin_30907935的博客 217

从零开始,用MATLAB/Simulink手把手搭建一个无刷直流电机(BLDC)的控制模型

本文详细介绍了如何使用MATLAB/Simulink从零开始搭建无刷直流电机(BLDC)控制模型。通过可视化建模方法,避开繁琐的数学推导,直接构建三相逆变器、电机本体参数化模型、霍尔传感器与换相逻辑实现,以及速度闭环控制设计。文章还提供了PID控制器整定、抗饱和处理和系统调试的实用技巧,帮助工程师快速掌握BLDC控制系统的仿真与实现。

weixin_27741699的博客 254

【ARM 裸机开发 (IMX6ULL-mini)】EPIT/GPT 定时器、 UART 串口驱动

本文基于 i.MX6ULL-mini 裸机开发,在时钟配置基础上,讲解 EPIT、GPT 定时器与 UART 串口外设原理与驱动编写。EPIT 为递减定时器,支持硬件自动重载实现周期中断;GPT 是递增定时器,利用自由运行模式实现高精度阻塞延时,同时介绍按键软件 / 硬件消抖方案。文章梳理 UART 通信分类、电平标准、流控机制,详解串口寄存器与波特率计算,配套完整裸机 C 代码,帮助掌握定时器中断、延时与串口收发,夯实 ARM 裸机外设开发基础。

2403_89702754的博客 650

AutoCAD2014与ObjectARX开发环境搭建实战指南

本文提供了一份详细的AutoCAD2014与ObjectARX开发环境搭建实战指南。内容涵盖从AutoCAD2014、Visual Studio 2010及ObjectARX 2014 SDK的版本匹配与环境准备,到Wizard安装、编码问题解决、Visual Studio配置,并最终通过一个完整的绘图命令开发示例,手把手引导开发者创建并加载第一个可运行的ObjectARX插件,为后续深入开发奠定坚实基础。

weixin_28475533的博客 288

Qt QWebEngine实战:手把手教你将Vue3/React前端项目嵌入C++桌面程序

本文详细介绍了如何利用Qt的QWebEngine模块将Vue3/React前端项目无缝嵌入C++桌面程序,实现现代前端框架与原生C++的深度整合。通过环境准备、项目架构设计、前端适配、Qt端集成、双向通信建立及性能优化等步骤,开发者可以高效构建兼具Web灵活性和本地系统能力的混合应用。

weixin_28736355的博客 390

RDKX5裸机开发实战:ARM64交叉编译与UART启动全流程

ARM64是当前主流嵌入式与边缘计算平台的核心指令集架构,其与x86_64存在根本性隔离,必须依赖交叉编译实现跨架构构建。裸机开发作为理解硬件本质的起点,通过aarch64-linux-gnu工具链生成无操作系统依赖的二进制程序,直接操作寄存器完成UART初始化与字符输出,具备极高的确定性与可追溯性。该过程涵盖工具链选型(如Linaro GCC)、链接脚本配置、复位向量设置、波特率精确计算等关键技术环节,广泛应用于国产SoC(如瑞芯微AXU15EGP)的底层验证、BootROM调试及安全启动开发。本文以RD

weixin_33910137的博客 178

实战指南 | IC模拟版图设计从零到精通,手把手带你掌握EDA工具与GDSII输出

本文提供了一份从零开始的IC模拟版图设计实战指南。详细介绍了如何搭建Linux环境、安装Cadence Virtuoso等EDA工具,并深入解析了PDK设计规则。通过手把手绘制CMOS反相器版图的实例,系统讲解了版图绘制、DRC/LVS验证、寄生参数提取、匹配设计以及ESD防护等核心技能,最终指导如何正确生成交付芯片制造厂的标准GDSII文件,帮助读者掌握完整的模拟版图设计流程。

weixin_29214691的博客 390

ARM裸机开发避坑指南:用C语言和寄存器直接操作Exynos 4412的UART

本文详细介绍了在Exynos 4412上进行ARM裸机开发时,如何通过C语言直接操作UART寄存器实现串口通信。内容涵盖芯片手册高效阅读、波特率配置的隐藏陷阱、寄存器操作的防御性编程以及波形调试实战技巧,帮助开发者避开常见坑点,提升开发效率。

weixin_30905133的博客 297

某10kV纺织厂供电系统设计【CAD图纸源码+Word文档】

本文详细介绍了设计变电所原始资料,负荷统计,基于负荷统计给出了变压器的选型,变电所主接线方式的设计、高低压母线、电缆的技术要求、短路电流的计算以及相关电气设备的保护参数及保护定值的计算、安全措施的规定。

weixin_761237174的博客 2744

python 实现一个完整的基于Python的多视角三维重建系统,包含特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能

本文介绍了一个基于Python的多视角三维重建系统的实现,涵盖了特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能。首先,系统通过安装必要的库(如OpenCV、NumPy等)并加载图像数据,初始化相机参数。接着,系统使用SIFT、SURF或ORB算法提取图像特征点,并通过FLANN或BF方法进行特征匹配,应用Lowe's ratio test筛选优质匹配。该系统为后续的相机位姿估计和三维重建奠定了基础,能够从多视角图像中恢复三维场景结构。

huanghm88的专栏 614

硬件开发2-ARM裸机开发4-IMX6ULL - 串口UART

摘要:数据传输方式可分为单工、半双工和全双工三种类型,各具特点和应用场景。数据传输组织方式包括串行和并行通信,时序控制方式有同步和异步通信。串口通信属于异步串行通信,其电气表达标准包括TTL、RS-232、RS-485和RS-422,它们在电平范围、抗干扰能力和应用场景上存在差异。串口初始化需设置比特率相关参数,通过公式计算寄存器值。此外,还涉及makefile的升级优化。

DebugKitty的博客 726

通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法

最近笔者由于项目需要,又得学习一个新工具:SAP Cloud Platform Integration,简称 CPI,以前又叫做HCI - HANA Cloud Platform Integration Service.笔者想通过本文,把使用这个工具的第一手体会,分享给曾经用过SAP CRM中间件,但尚未有机会接触到CPI的朋友们。之所以本文标题里把SAP CRM中间件和SAP CPI关联在一起,是因为二者同广义上说,扮演的都是系统集成里中间件的角色。SAP ERP和CRM通过qRFC进行业务数据同步,而中

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2275

三星soc平台Exynos4412平台裸机开发介绍(六)之基于ARM裸机实现UART驱动

基于ARM裸机的UART驱动 UART: 软件协议:通用异步收发器,使用的是rs232协议。 硬件接口:db9接口,9根插针,实际使用 2,3,5 2 ----> 接收 3 ----> 发送 5 ----> 接地 rs232协议 串行、全双工、异步的通信协议。 串行:所有的数据排队进行发送。 全双工:同一时刻,可以接收,也可以发送。 异步:没有同时时钟源。...

sinat_39199886的博客 547

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

2201_75490992的博客 467

STM32F407中文手册

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

ARM裸机开发:同步异步理解、UART、串口等概念

很明显,为保证每个比特占用数据线的时间,发送方和接收方需按照各自的系统计时且双方之间的误差不能太大。通常不能超过(6%)。就好比在打字一样,每次敲击键盘发送一个字母,速度快慢由打字者自己控制,没规定每敲击一个字母之间要等多久,只要保证接收端能够正确识别并解析即可。就好比在合唱团里,大家一起唱歌的节奏是由指挥员指挥的,每个人都按照指挥员的节奏唱歌,保证大家唱的是同一首歌且节奏一致。(二)RS485为单工通信,差分信号传输方式(抗干扰能力强):两根线电压差来作为高低电平。(一)TTL:通常指引脚产生的电平。

2501_91498265的博客 754

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux裸机开发3——UART编程

Linux裸机开发3——UART编程

qq_51654553的博客 553

ARM裸机开发:串口通信

ARM裸机开发:串口通信

嵌入式学习记录站点 3841

视频教程-《嵌入式技术 ARM裸机开发》之 UART通信-嵌入式

《嵌入式技术 ARM裸机开发》之 UART通信 2008年毕业于沈阳航空航天...

weixin_32128773的博客 195

(十)arm裸机开发---UART串口通信实验

串口是很常用的通信接口,本节我们就介绍串口。虽然板子上的串口是通过CH340转为usb接口了,但是本质是一样的。 文章目录一、UART的寄存器配置1.设置UART的时钟2.UART的重要的寄存器二、程序编写 一、UART的寄存器配置 1.设置UART的时钟 CSCDR1[6] = 0。选择UART的时钟。 CSCDR1[5:0] = 0 设置一分频。 2.UART的重要的寄存器 UART1_URXD[7:0]:读到的串口数据就放在这个寄存器中。 UART1_UTXD[7:0]:要写的串口数据就放在这个寄存

Engineering Lion的博客 1029

重头开始嵌入式第四十六天(硬件 ARM裸机开发 ADC 中断 UART)

ADC(Analog-to-Digital Converter)即模拟数字转换器。在计算机系统中,中断是一种非常重要的机制。中断是指计算机在执行程序的过程中,由于出现了某些突发事件(如外部设备请求服务、定时器溢出等),暂停当前正在执行的程序,转而去执行相应的中断处理程序,处理完突发事件后再返回到被中断的程序继续执行。在芯片和通信领域中,UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器。

qq_64792908的博客 1684

ARM裸机实验 UART串口(S3C2440A) TQ2440

代码适用于TQ2440开发板。开发环境为Keil v5 MDK 串口初始化以及使用流程:(这里没有涉及中断) 1)初始化系统时钟,主要是分频器的设置; 2)初始所使用的串口,包括设置FIFO,AFC,数据传输格式,波特率 串口工作时钟源设置; 3)所用串口对应I/O引脚初始化; 4)收发数据。

程 序 猿 1698

ARM裸板驱动开发之串行通信协议

    最新打算学习基于内核驱动开发方面的知识,在看书的过程中发现,除了要遵循内核的开发规则外,具体实现部分和裸机开发差异不大,由于研究生期间做过单片机的开发,但毕竟ARM裸机开发要比单片机开发更复杂的多,因此打算从裸机开发开始重新学习一遍。 接下来就三星的S3C2440A为平台开始接下来的学习过程,该芯片的CPU核是ARM920T。下图是该SOC的结构框图   一、如何学习通信协议 ...

梦梦的博客 524

rpi4-osdev Hello World实现:你的第一个树莓派4裸机程序

rpi4-osdev是一个面向树莓派4的裸机操作系统开发教程项目,通过它你可以从零开始学习如何为树莓派4编写不依赖任何操作系统的"裸机"程序。本文将带你完成最经典的Hello World程序,这是进入裸机开发世界的第一步。 ## 📋 准备工作:了解项目结构 在开始编写代码前,让我们先了解项目的基本结构。Hello World程序位于项目的`part3-helloworld`目录下,主要包含以

gitblog_00904的博客 536

深入浅出ARM7在黄山派开发板的应用

本文以黄山派开发板为平台,深入讲解ARM7处理器的启动流程、异常向量、寄存器模式与CPSR控制,涵盖汇编与C混合编程、堆栈初始化、GPIO驱动、定时器中断、UART通信及FATFS文件系统移植等核心内容,帮助开发者从零构建完整的裸机系统。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值