历史上的今天
今天是:2025年03月03日(星期一)
2020年03月03日 | S3C2440串口(1)
2020-03-03 来源:eefocus
1.S3C2440串口概述
串口通讯一般要增加电平转换电路,原因是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;
}
史海拾趣
|
运用全球领先的软件的和平台,结合对商业需求把握,凭借出色的规划设计能力和技术实施能力,运用成熟的项目管理能力,帮助客户在Internet/Intranet上建立全面的基于Web的企业应用,主营业务是向企业及个人提供综合上网服务,目标是建设成为中国领先 ...… 查看全部问答> |
|
本公司招聘硬件工程师,从事检测仪器开发。关注于弱信号的采集、整理和放大。 1. 本科及以上学历; 2. 电子、自动化、硬件电路设计、检测技术等相关专业; 3. 有CPLD或FPGA开发经验者优先; 4.&nbs ...… 查看全部问答> |
|
我想向大家请教一下,51单片机的数据传输方式是由输入设备先经过存储器再到数据处理器,还是反过来呢? 如果是前一种的话,数据处理之后就直接存储还是先到地主找数据再返回到存储器,由存储器向输出设备?请各位大虾多多打救啊。… 查看全部问答> |
|
fatutil.dll 这个看有些人实现多fat 分区会用到这个dll ,在SLC nandflash 上,我现在要做这个功能,但是行不通,这个fatutil.dll 什么用的?… 查看全部问答> |
|
移动电源电路设计: 输入1:3.3到4.2V,输出5V,这个是电池逆变电路 输入2:4.5V到5.5V,输出3.7V,这个是电池充电电路 设计步骤: 第一步,选择两个输入和两个输出,添加电源和负载 第二步,编辑优化设计参数 第三步,检视和编辑项目设计 ...… 查看全部问答> |
|
STM32用DMA读取ADC1的两个通道,,怎么都不能实现是怎么回事 啊 /******************** (C) COPYRIGHT 2012 WildFire Team ************************** * ÎļtÃû £omain.c * Ãèêö £oóÃ3.5.0°æ±¾½¨μÄ1¤3ì ...… 查看全部问答> |




