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 串口通讯相关推荐

  1. UART串口通讯协议解析

    UART串口通讯协议解析 概述 接口 通信协议 波特率 示例 最后 概述 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART ...

  2. ABOV单片机UART串口通讯实现讲解及示例代码-[MC96F6332D]

    一.准备工作 1.KEIL C51编译环境 2.CodeGen8 代码生成器 3.MC96F6332D 开发板 4.USB-OCD II仿真器 二.生成串口通讯代码 1.在CodeGen8 代码生成器 ...

  3. 23.UART串口通讯基本原理

    UART串口通讯基本原理 笔记基于正点原子官方视频 视频连接https://www.bilibili.com/video/BV1Wx411d7wT?p=71&spm_id_from=333.1 ...

  4. MKS SERVO42C 闭环步进电机 使用说明(三)串口通讯

    第1部分 硬件介绍 1.1 硬件清单 序号 品名 数量 1 MKS SERVO42C V1.0(包含电机) 1 2 PCBA连接线 1 3 串口助手模块/单片机 1 4 DC 12V-24V电源 1 ...

  5. c语言uart串口通讯,UART串口通信的基本应用

    通信的三种基本类型 常用的通信从传输方向上可以分为单工通信.半双工通信.全双工通信三类. 单工通信就是指只允许一方向另外一方传送信息,而另一方不能回传信息.比如电视遥控器.收音机广播等,都是单工通信技 ...

  6. UART串口通讯乱码分析

    一:基础功能分析 1:串口通讯乱码最主要的原因就是波特率不对,乱码的话请先检查波特率是否正确: 2:波特率正确的条件下,请检查设备两端电压是否稳定,电压不稳也会导致乱码: 3:当我们无法确认串口波特率 ...

  7. python隐藏画笔箭头的函数是hide_Python开发的串行通信上位机程序三部曲第三部分,串口,通讯,用,图形,方式,显示,数据...

    用Visual Basic或者C#, LabVIEW等软件开发的上位机界面,和文本式交互界面比较而言,就是可以用图形方式来显示数据.那么python可不可以用图形来显示数据呢?Of course! 和 ...

  8. c语言uart串口通讯,uart串口通信c语言实现

    通信,按照传统的理解就是信息的传输与交换.对于单片机来说,通信则与传感器.存储芯片.外围控制芯片等技术紧密结合,成为整个单片机系统的"神经中枢".没有通信,单片机所实现的功能仅仅局 ...

  9. 嵌入式Linux开发8——UART串口通讯

    1. 背景知识 1.1 UART通讯格式   串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单.使用两条线即可实现双向通信,一条用于发送,一条用于接收 ...

最新文章

  1. ubuntu libapache2-mod-php5,ubuntu安装apache2 mysql5 php5
  2. python27安装-linux下安装python27 nginx 和uwsgi
  3. 使用keras的cifar10.load_data()总是会自动下载问题的解决
  4. CUBRID学习笔记 42 Hierarchical QuerySQL层级查询
  5. 你精通excel吗?不,我精通python操控excel!
  6. python编译成c代码_python如何调用c编译好可执行程序
  7. BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
  8. Matplotlib 入门(详看注释)
  9. java 数组溢出异常,Java数组超出范围时如何处理多个异常?
  10. 无穷大常量0x7fffffff 0x3fffffff 0x3f3f3f3f
  11. 详细安装WIN 10纯净版(虚拟机安装、真机笔记本安装)
  12. 26、python密度聚类方法(DBSCAN密度聚类)
  13. CAD:AutoCAD快捷键指令大全(非常值得收藏),本人项目案例实践积累总结
  14. 随身WIFI刷入debian
  15. 连接数据库的Provider、Driver等字符串的写法
  16. Miracle密码算法开源库(三)分析 :mrarth1.c
  17. 10个有趣且易上手的AI项目(附Python源代码)
  18. SCSI子系统基础学习笔记 (之UFS子系统) - 1.2 概述(软件部分)
  19. 网管技巧:如何修改路由器和交换机的密码
  20. 保持良好的人际关系,赢得好人缘的八大诀窍

热门文章

  1. 1个模型横扫40+个SOTA!22位华人共同打造佛罗伦萨模型,一统图像视频文本,含9亿图像-文本对...
  2. 视频超分,Transformer再下一城之VSR-Transformer
  3. 目标检测中的不平衡问题综述
  4. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
  5. 这可能是目前最好的图像超分辨率算法,刚刚开源了
  6. Android开发继承webview,WebView如何从当前的Android主题继承颜色?
  7. 【OpenCV】OpenCV函数精讲之 -- 鼠标操作
  8. 新模型SkipNet在ImageNet分类任务大放光彩!优化损失函数!
  9. 优秀!一种巧妙组合算法YOLOX!旷视重磅开源!
  10. 太赞了!性能超越谷歌MobileNet!ECCV2020重磅推出MobileNeXt !