历史上的今天
今天是:2025年04月26日(星期六)
2019年04月26日 | S3C2440开发板裸机程序系列04—串口通信
2019-04-26 来源:eefocus
1. S3C244串口概述
串口通讯一般要增加电平转换电路,原因是TTL/CMOS电平与RS232电平不一致:
TTL/CMOS电平:

CMOS电平:

常用的电平转换芯片是MAX3232。
S3C2440有3个独立的异步串口,可以选择工作在中断或DMA方式下。每个UART包括一个波特率发生器、发送器、接收器和一个控制单元。
UART有FIFO模式和非FIFO模式。FIFO模式下可以利用64字节的发送/接收缓冲寄存器,非FIFO模式下只使用了发送/接收缓冲寄存器中的1个字节。本篇入门级以非FIFO为例。
2. 串口设置及相关寄存器
串口引脚是GPIO复用的。本篇UART只用3根引脚:TXD、RXD、GND。


TXD0 – GPH2 , RXD0 – GPH3
需要初始化以下6个寄存器:
ULCONn (UART LINE CONTROLREGISTER) – 设置数据位信息

UCONn(UART CONTROL REGISTER) – 设置发送和接收模式,及时钟源。


UBRDIVn– 设置UART波特率
波特率计算公式:

例子:

UTRSTATn(UARTTX/RX REGISTER) – 状态位

使用while(!UTRSTAT0&(1<<2)); 等待发送完成(while(!UTRSTAT0&(1<<1)); 也可以)
使用while(!UTRSTAT0&(1<<0)); 等待接收数据。
UTXHn(HOLDINGREGISTER) – 发送缓冲寄存器(Transmit)
URXHn(HOLDINGREGISTER) – 接收缓冲寄存器(Receive)


3. 串口UART0应用
串口UART0接收到数据后再将其发出去。波特率为115200。
uart.h
#ifndef __UART_H__
#define __UART_H__
extern void Uart0_Init(unsigned int baudrate);
extern void putc(unsigned char c);
extern unsigned char getc(void);
#endif
uart.c
#include "2440addr.h"
#define PCLK 50000000
void Uart0_Init(unsigned int baudrate)
{
rGPHCON &= ~((3<<4)|(3<<6));
rGPHCON |= (2<<4)|(2<<6); //GPH2-TXD, GPH3-RXD
rGPHUP &= ~((1<<2)|(1<<3)); //GPH2,GPH3 enable pull-up
rULCON0 = 0x03; //8-bits 1-stop bit
rUCON0 = 0x05;
rUBRDIV0 = (int)(PCLK/baudrate/16)-1;
rURXH0 = 0;
}
void putc(unsigned char c)
{
rUTXH0 = c;
// while(!(rUTRSTAT0 & (1<<2)));
while(!(rUTRSTAT0 & (1<<1))); //ok
}
unsigned char getc(void)
{
while(!(rUTRSTAT0 & (1<<0)));
return rURXH0;
}
Main.c
#include "common.h"
#include "uart.h"
int Main()
{
unsigned char a;
Uart0_Init(115200);
while(1)
{
a=getc();
putc(a);
}
return 0;
}
史海拾趣
|
今天中午去电子市场取回来了,顺便买了几个东东。 两层板,另一面也有些电容电阻之类的。我在淘宝上问了下,要230。 最后还是送到我经常打样的人那儿,先做四个样板。100元 100*80cm大小。 虽然质量不算太好。作为实验用还是可以 ...… 查看全部问答> |
|
本工作室由多位资深工程师,可为客户定制ARM平台、Xcale平台、各种单片机平台及板卡设计服务。硬件设计及软件设计(WINCE LINUX)都已做过6-8年的设计,电路板目前以6层板设计为主。 其成功案例有: 基于S3C2440 的PDA手持终端、 基于PXA270 的数 ...… 查看全部问答> |
|
以前在windows 下写过socket 程序,现在要在vxworks 下使用zbuf ,不知道怎么用。tornado 的文档里面有介绍zbuf 的使用,但我现在用的是workbench,这里面的文档没有介绍zbuf的,不知道是不是也支持zbuf?这下面好像没有 zbufLib.h 头 ...… 查看全部问答> |
|
我的工程是一个基于对话框,在workspase里打不开class和resourceview 只能打开fileview,双击class和resourceview就自己关了,在打开工程时也要开几次了 ,我的工程里多了MVCIA.tmp和RCao2632两个文件了 这是怎么回事了 麻烦个位了哈 小 ...… 查看全部问答> |
|
请问大家,我有个项目,厂家要求显示瞬时流量为每小时的流量,我打算每秒钟采相应的压力,温度,差压,频率进来,然后计算出流量来,我这个每秒钟计算出来的流量是不是还要乘以3600才能做为每小时的瞬时流量呢?谢谢… 查看全部问答> |




