您现在的位置: 主页 > MCU > 单片机技术应用 > uart串口发送---那些年我们一起玩mini2440(arm9)裸机 -
本文所属标签:
为本文创立个标签吧:

uart串口发送---那些年我们一起玩mini2440(arm9)裸机 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]Uart工作原理:数据通信方式为:并行通信与串行通信两种:§并行通信:利用多条数据线将数据的各位同时传送。它的特点是:传输速度快,是用于短距离通信;§串行通信:利用一条数据线将数据一位位地顺序传送。特点是通

Uart工作原理:

本文引用地址: http://www.21ic.com/app/mcu/201808/783672.htm

数据通信方式为:并行通信与串行通信两种:

§并行通信:利用多条数据线将数据的各位同时传送。

它的特点是:传输速度快,是用于短距离通信;

§串行通信:利用一条数据线将数据一位位地顺序传送。

特点是通信线路简单,利用简单的线缆就实现通信,低成本,是用于远距离通信。

异步通信:

a异步通信:以一个字符为传输单位,通过两个字符间的时间间隔是不固定的,然而同一字符中的两个相邻位之间的时间间隔是固定的。

a通信协议:是指通信双方约定的一些规则。在异步通讯时,对数据格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。

起始位:先发一个逻辑“0”信号,表示传输字符的开始;

数据位:紧接在起始位之后。数据位的个数可以是4、5、6、7、8等,从最低位开始传送,靠时钟定位。

奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或(奇校验),以此校验数据传送的正确性。

停止位:它是一个字符数据的结束标志。

空闲位:处于逻辑“1”状态,表示当前线路没有数据传送。

波特率:

是衡量数据传送率的指标:记录每秒中传送的二进制位数。例如:数据传送速率为120字符、每秒。而每一个字符为10位,则其传送的波特率为10*120=1200位/秒=1200波特率

UART基本原理

通用异步收发器,简称UART,即“Universal Asynchronous Receiver Transmitter”,它用来传输串行数据;

发送数据时:

CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;

接收数据时:

UART检测另一根电线上的信号,将串行数据放在缓冲区中,CPU可读取UART获得的这些数据。

UART驱动程序设计

UART初始化:1.发送数据;2.接收数据;

UART初始化:1.设置波特率;2.设置数据传输格式;3.选择通道工作模式;

一.设置波特率:(UBRDIV)

在s3c2440中,通过UBRDIV(p352)寄存器可以设定UART的波特率。Uart0、Uart1、Uart2分别对应UBRDIV0,UBRDIV1、UBRDIV2

到底UBRDIV寄存器中的值与波特率有何关系?

UBRDIV=(int)(UART clock/ (buad rate *16))-1

(UART clock:PCLK or FCLK/ n or UEXTCLK)

如波特率为115200bps,UART时钟为40MHZ

UBRDIV =(int) (40MHZ /(115200*16))-1

二.设置数据传输格式(ULCON)

在s3c2440中,通过ULCON(page341),可以设置传输格式(有多少个数据位、是否使用校验位、是奇校验还是偶校验,有多少个停止位、是否使用流量控制)

Uart0、Uart1、Uart2分别对应ULCON0、ULCON1、ULCON2.

三.设置通道工作模式(UCON)

在s3c2440中,通过UCON(page342),可以设置UART通道的工作模式,(中断模式、查询模式、或DMA模式)

Uart0、Uart1、Uart2分别对应UCON0、UCON1、UCON2.

这三步都属于初始化:初始化完成之后à发送或/接收数据

发送数据:

将要发送的数据写UTXHn, UART会将保存到缓冲区中,并自动发出去。

UTXH0、UTXH1、UTXH2

接收数据:

当UART收到数据时(UTRSTATn寄存器bit[0]被置1),CPU读取URXHn寄存器,即可获得数据。

URXH0、URXH1、URXH2寄存器中读取数据


Main.c

#defineGLOBAL_CLK1

#include

#include

#include"def.h"

#include"option.h"

#include"2440addr.h"

#include"2440lib.h"

#include"2440slib.h"

#include"mmu.h"

#include"profile.h"

#include"memtest.h"

staticvoidcal_cpu_bus_clk(void);

voidSet_Clk(void);

/*************************************************

Functionname:delay

Parameter:times

Description:延时函数

Return:void

Argument:void

Autor&date:Daniel

**************************************************/

voiddelay(inttimes)

{

inti,j;

for(i=0;i

for(j=0;j<400;j++);

}

/*************************************************

Functionname:Main

Parameter:void

Description:主功能函数,实现了串口的收发功能

首先想串口发送十次“helloworld”,

Return:void

Argument:void

Autor&date:Daniel

**************************************************/

voidMain(void)

{

inti;

intScom=0;

Set_Clk();

beep_init();

/*设置波特率、数据位、停止位、校验位*/

Uart_Init(0,115200);

Uart_Select(Scom);

for(i=0;i<10;i++)

Uart_Printf("nHelloWorld!n");

while(1)

{

while(Uart_GetKey()=='r')

{

for(i=0;i<10;i++)

beep_run();

Uart_Printf("nBeepQuit!n");

}

}

}

/*************************************************

Functionname:Set_Clk()

Parameter:void

Description:设置CPU的时钟频率

Return:void

Argument:void

Autor&date:Daniel

**************************************************/

voidSet_Clk(void)

{

inti;

U8key;

U32mpll_val=0;

i=2;//don'tuse100M!

//boot_params.cpu_clk.val=3;

switch(i){

case0://200

key=12;

mpll_val=(92<<12)|(4<<4)|(1);

break;

case1://300

key =



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > uart串口发送---那些年我们一起玩mini2440(arm9)裸机 -
 

"uart串口发送---那些年我们一起玩mini2440(arm9)裸机 -"的相关文章

网站地图

围观()