(三) UART 串口通讯
UART : university asynchronous receiver and transmitter UART // 通用异步接收器和发送器
为什么要有串口:因为许多嵌入式设备没有显示屏,无法获得设备的实事数据信息,所以可以通过 UART 串口和超级终端相连,打印嵌入式设备输出信息。也可以通过串口跟踪和调试。
比如设备: 网络路由器、交换机通过串口配置, GPS接收器通过串口输出GPS接收的数据。
1、异步通信技术:发送和接收方没有同步时钟,只有数据线,但是协商好了协议,(固定频率)进行数据采样。 即 波特率 bit per second 保证正确性
2、传输模式: 轮询模式、中断模式、DMA模式
3、S3C2440 UART 控制器 :
UART 接收装置和发送装置 包含一个 64Bytes 的缓冲器(所以分为 缓冲模式 和 非缓冲模式)
4、数据帧: 是 uart 最基本的通信单元,包含 开始位、数据位、校验位、停止位(双方约定好数据帧,指定同一波特率,确保数据传输同步)
具体还是要看芯片手册相关寄存器,不是很难。
——————————————————————————————————————————————————————————————————————————
F:\ARM+LINUX\深入浅出底层嵌入式开发\work\armarch\uart_init
启动代码:
; ; UART串口实验 ;GPBCON EQU 0x56000010 GPBDAT EQU 0x56000014AREA Init, CODE, READONLYENTRY start ; close watchdogldr r0, = 0x53000000 ; 将看门狗控制寄存器地址放入r0mov r1, #0str r1, [r0] ; 设置看门狗控制寄存器的值为0bl initmem ; 跳转到initmem代码段,初始化内存IMPORT xmain ; 引入main.c中的xmain函数ldr sp, =0x34000000 ; 调用C程序之前先初始化栈指针ldr lr, =loop ; 设置xmain函数的返回地址ldr pc, =xmain ; 跳转到C程序中的xmain函数的入口处执行loopb loop ; 死循环initmem ; 内存初始化ldr r0, =0x48000000 ; 加载内存相关寄存器首地址r0ldr r1, =0x48000034 ; 加载内存相关寄存器尾地址到r1adr r2, memdata ; 将寄存器配置数据地址段首地址加载到r2initmemloopldr r3, [r2], #4 ; 循环设置存寄存器str r3, [r0], #4teq r0, r1bne initmemloop ; 循环到最后一个寄存器时退出函数bx lrmemdataDCD 0x22000000 ;BWSCONDCD 0x00000700 ;BANKCON0 DCD 0x00000700 ;BANKCON1 DCD 0x00000700 ;BANKCON2 DCD 0x00000700 ;BANKCON3 DCD 0x00000700 ;BANKCON4 DCD 0x00000700 ;BANKCON5 DCD 0x00018005 ;BANKCON6 DCD 0x00018005 ;BANKCON7 DCD 0x008e07a3 ;REFRESH DCD 0x000000b1 ;BANKSIZE DCD 0x00000030 ;MRSRB6 DCD 0x00000030 ;MRSRB7END
init.s
xmain 函数
1 /* xmain.c */ 2 3 /* GPIO registers */ 4 #define GPHCON (*(volatile unsigned long *)0x56000070) 5 #define GPHDAT (*(volatile unsigned long *)0x56000074) 6 #define GPHUP (*(volatile unsigned long *)0x56000078) 7 8 /*UART registers*/ 9 #define ULCON0 (*(volatile unsigned long *)0x50000000) 10 #define UCON0 (*(volatile unsigned long *)0x50000004) 11 #define UFCON0 (*(volatile unsigned long *)0x50000008) 12 #define UMCON0 (*(volatile unsigned long *)0x5000000c) 13 #define UTRSTAT0 (*(volatile unsigned long *)0x50000010) 14 #define UTXH0 (*(volatile unsigned char *)0x50000020) 15 #define URXH0 (*(volatile unsigned char *)0x50000024) 16 #define UBRDIV0 (*(volatile unsigned long *)0x50000028) 17 18 #define TXD0READY (1<<2) //发送数据状态OK 19 #define RXD0READY (1) //接收数据状态OK 20 21 /* UART串口初始化 */ 22 void uart_init( ) 23 { 24 GPHCON |= 0xa0; //GPH2,GPH3 used as TXD0,RXD0 25 GPHUP = 0x0; //GPH2,GPH3内部上拉 26 ULCON0 = 0x03; //8N1 27 UCON0 = 0x05; //查询方式为轮询或中断;时钟选择为PCLK 28 UFCON0 = 0x00; //不使用FIFO 29 UMCON0 = 0x00; //不使用流控 30 UBRDIV0 = 12; //波特率为57600,PCLK=12Mhz 31 } 32 33 /* UART串口单个字符打印函数 */ 34 extern void putc(unsigned char c) 35 { 36 while( ! (UTRSTAT0 & TXD0READY) ); 37 UTXH0 = c; 38 } 39 40 /* UART串口接受单个字符函数 */ 41 extern unsigned char getc(void) 42 { 43 while( ! (UTRSTAT0 & RXD0READY) ); 44 return URXH0; 45 } 46 47 /* UART串口字符串打印函数 */ 48 extern int printk(const char* str) 49 { 50 int i = 0; 51 while( str[i] ){ 52 putc( (unsigned char) str[i++] ); 53 } 54 return i; 55 } 56 57 __inline void delay(int msec) 58 { 59 int i, j; 60 for(i = 1000; i > 0; i--) 61 for(j = msec*10; j > 0; j--) 62 /* do nothing */; 63 } 64 65 /* xmain 通过UART串口打印字符串 */ 66 int xmain() 67 { 68 uart_init(); 69 while(1) 70 { 71 delay(10); 72 printk("Uart串口打印试验\r\n"); 73 } 74 // return 0; 这句省去,这样 就不会出现 statement is unreachable 75 }
烧到nor flash ,自己到超级终端自己摸索!!!!(参考:杨铸 P151 页)
转载于:https://www.cnblogs.com/shengruxiahua/p/5095216.html
(三) UART 串口通讯相关推荐
- UART串口通讯协议解析
UART串口通讯协议解析 概述 接口 通信协议 波特率 示例 最后 概述 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART ...
- ABOV单片机UART串口通讯实现讲解及示例代码-[MC96F6332D]
一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成串口通讯代码 1.在CodeGen8 代码生成器 ...
- 23.UART串口通讯基本原理
UART串口通讯基本原理 笔记基于正点原子官方视频 视频连接https://www.bilibili.com/video/BV1Wx411d7wT?p=71&spm_id_from=333.1 ...
- MKS SERVO42C 闭环步进电机 使用说明(三)串口通讯
第1部分 硬件介绍 1.1 硬件清单 序号 品名 数量 1 MKS SERVO42C V1.0(包含电机) 1 2 PCBA连接线 1 3 串口助手模块/单片机 1 4 DC 12V-24V电源 1 ...
- c语言uart串口通讯,UART串口通信的基本应用
通信的三种基本类型 常用的通信从传输方向上可以分为单工通信.半双工通信.全双工通信三类. 单工通信就是指只允许一方向另外一方传送信息,而另一方不能回传信息.比如电视遥控器.收音机广播等,都是单工通信技 ...
- UART串口通讯乱码分析
一:基础功能分析 1:串口通讯乱码最主要的原因就是波特率不对,乱码的话请先检查波特率是否正确: 2:波特率正确的条件下,请检查设备两端电压是否稳定,电压不稳也会导致乱码: 3:当我们无法确认串口波特率 ...
- python隐藏画笔箭头的函数是hide_Python开发的串行通信上位机程序三部曲第三部分,串口,通讯,用,图形,方式,显示,数据...
用Visual Basic或者C#, LabVIEW等软件开发的上位机界面,和文本式交互界面比较而言,就是可以用图形方式来显示数据.那么python可不可以用图形来显示数据呢?Of course! 和 ...
- c语言uart串口通讯,uart串口通信c语言实现
通信,按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与传感器.存储芯片.外围控制芯片等技术紧密结合,成为整个单片机系统的"神经中枢".没有通信,单片机所实现的功能仅仅局 ...
- 嵌入式Linux开发8——UART串口通讯
1. 背景知识 1.1 UART通讯格式 串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单.使用两条线即可实现双向通信,一条用于发送,一条用于接收 ...
最新文章
- ubuntu libapache2-mod-php5,ubuntu安装apache2 mysql5 php5
- python27安装-linux下安装python27 nginx 和uwsgi
- 使用keras的cifar10.load_data()总是会自动下载问题的解决
- CUBRID学习笔记 42 Hierarchical QuerySQL层级查询
- 你精通excel吗?不,我精通python操控excel!
- python编译成c代码_python如何调用c编译好可执行程序
- BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
- Matplotlib 入门(详看注释)
- java 数组溢出异常,Java数组超出范围时如何处理多个异常?
- 无穷大常量0x7fffffff 0x3fffffff 0x3f3f3f3f
- 详细安装WIN 10纯净版(虚拟机安装、真机笔记本安装)
- 26、python密度聚类方法(DBSCAN密度聚类)
- CAD:AutoCAD快捷键指令大全(非常值得收藏),本人项目案例实践积累总结
- 随身WIFI刷入debian
- 连接数据库的Provider、Driver等字符串的写法
- Miracle密码算法开源库(三)分析 :mrarth1.c
- 10个有趣且易上手的AI项目(附Python源代码)
- SCSI子系统基础学习笔记 (之UFS子系统) - 1.2 概述(软件部分)
- 网管技巧:如何修改路由器和交换机的密码
- 保持良好的人际关系,赢得好人缘的八大诀窍
热门文章
- 1个模型横扫40+个SOTA!22位华人共同打造佛罗伦萨模型,一统图像视频文本,含9亿图像-文本对...
- 视频超分,Transformer再下一城之VSR-Transformer
- 目标检测中的不平衡问题综述
- 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
- 这可能是目前最好的图像超分辨率算法,刚刚开源了
- Android开发继承webview,WebView如何从当前的Android主题继承颜色?
- 【OpenCV】OpenCV函数精讲之 -- 鼠标操作
- 新模型SkipNet在ImageNet分类任务大放光彩!优化损失函数!
- 优秀!一种巧妙组合算法YOLOX!旷视重磅开源!
- 太赞了!性能超越谷歌MobileNet!ECCV2020重磅推出MobileNeXt !