目录
- 第一节 UART概述
- 1.1 UART的用处:
- 1.2 UART的优点
- 1.3 UART原理与概念
- 1.4 UART数据传输原理与过程
- 1.5 关于电平转换
- 1.6 UART内部具体机制
- 第二节 UART编程
第一节 UART概述
1.1 UART的用处:
(1)用于打印调试信息;
(2)用于外接各种模块:GPS、蓝牙等等。
1.2 UART的优点
结构简单且可靠。
1.3 UART原理与概念
如下图11.1所示:
1.4 UART数据传输原理与过程
我们在使用串口助手时,一般首先设置波特率,然后设置数据位、停止位、校验位、流量控制。那么,为什么这样设置呢,原理是什么?这节课讲了串口的原理就理解了。
注:波特率是指每秒传输的位数。
举例说明原理:
比如说ARM发送1Byte(如’A’)给PC,即发送0x41给PC(‘A’的ASCii码是41),即发送0b01000001给PC。发送过程如下所示:
对UART的特性和数据传输过程进行总结,如下:
1.5 关于电平转换
先说一下关于USB和UART的几个常识:
(1)根据不同电压uart(即串口)分为只在开发板内部使用的5v的ttl电平,和短距离传输的15v的rs232,和长距离传输的rs485等。ttl和rs232的协议一样,只需要转电平即可。
(2)uart、usb、iic 、spi都是协议接收方式不同。即uart和usb之间的传输还需要满足协议。USB本质上也是一种电平。
(3)说一下2440和PC数据传输机制:
其机制就是2440的串口接电脑的串口。
1.5.1 mini2440(友善之臂)数据传输
mini2440内部有一个电平转换芯片,将TTL转换为RS232,然后连接到电脑的RS232。但是现在的电脑没有RS232接口(9针接头)了,因此解决方案是:mini2440的RS232九针口转成USB,USB接到电脑,电脑端的USB转为串口(也可能不转,我还不清楚)。
这是Jz2440的传输方式(韦东山的板子):机制是,2440TTL电平转为USB,直接通过USB进行与电脑之间的数据传输。也就是说直接一个USB线即可完成连接传输。
1.6 UART内部具体机制
程序是如何通过UART写到PC,又怎么将PC的字节通过UART读呢?原理如下:
(1)补充:UART向CPU发出中断,是为了判断数据是否发送完毕,判断数据是否接收到。
(2)2440最高波特率Bandrate:115200。
115200,8n1中的8n1是指:8指Data位数,n指校验位,1指停止位。传输1byte需要10位。经计算2440最大传输速率为11520byte/s或者说115.2Kbit/s。
第二节 UART编程
uart.c
#include "s3c2440_soc.h"
void uart0_init()
{
GPHCON &= ~((3<<4) | (3<<6));
GPHCON |= ((2<<4) | (2<<6));
GPHUP &= ~((1<<2) | (1<<3));
UCON0 = 0x00000005;
UBRDIV0 = 26;
ULCON0 = 0x00000003;
}
int putchar(int c)
{
while (!(UTRSTAT0 & (1<<2)));
UTXH0 = (unsigned char)c;
}
int getchar(void)
{
while (!(UTRSTAT0 & (1<<0)));
return URXH0;
}
int puts(const char *s)
{
while (*s)
{
putchar(*s);
s++;
}
}
uart.h
#ifndef _UART_H
#define _UART_H
void uart0_init();
int putchar(int c);
int getchar(void);
int puts(const char *s);
#endif
main.c
#include "s3c2440_soc.h"
#include "uart.h"
int main(void)
{
unsigned char c;
uart0_init();
puts("Hello, world!\n\r");
while(1)
{
c = getchar();
if (c == '\r')
{
putchar('\n');
}
if (c == '\n')
{
putchar('\r');
}
putchar(c);
}
return 0;
}
start.S(汇编和上一节一样,无变动)
.text
.global _start
_start:
ldr r0, =0x53000000
ldr r1, =0
str r1, [r0]
ldr r0, =0x4C000000
ldr r1, =0xFFFFFFFF
str r1, [r0]
ldr r0, =0x4C000014
ldr r1, =0x5
str r1, [r0]
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0
ldr r0, =0x4C000004
ldr r1, =(92<<12)|(1<<4)|(1<<0)
str r1, [r0]
mov r1, #0
ldr r0, [r1]
str r1, [r1]
ldr r2, [r1]
cmp r1, r2
ldr sp, =0x40000000+4096
moveq sp, #4096
streq r0, [r1]
bl main
halt:
b halt
此外,还有s3c2440_soc.h文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)