IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2. S3C2440的串口(uart)裸板开发 -> 正文阅读

[嵌入式]2. S3C2440的串口(uart)裸板开发

串口的作用

  1. 打印调试信息
  2. 外接各种模块(GPS、蓝牙)
    特点:结构简单可靠
    在这里插入图片描述
    只需要三根线就可以完成ARM开发板和PC机之间的内容传输。
    TxD:发送
    RxD:接收
    Gnd:地线

怎么发送1byte字母’A’给PC机
3. 双方约定每一位(bit)发送所占用的时间,称为波特率
4. ARM开发板把原来高电平的TxD线拉低,报纸1bit时间,称为开始位(start bit)
5. PC机在低电平开始处计时
6. ARM根据要发送的数据驱动电平,逐位发送,TxD=Data[0],TxD = Data[1]……
7. PC机在数据位的中间读取引脚状态
8. 发送校验位(可选)
9. 发送一个高电平(双方约定高电平维持时间),称为结束位(stop bit)
在这里插入图片描述
10. TTL/COMS逻辑电平下,使用0V作为逻辑0,0~5V作为逻辑1(不适合长距离传输)
11. RS-232逻辑电平下,负电压作为逻辑0,正电压作为逻辑1(适合长距离传输)

ARM开发板使用的是TTL电平,PC机使用的是RS-232电平。中间要引入一个电平转换芯片,现在PC机很多都没有串口了,所以引入了USB转串口芯片。

S3C2440的串口模块框图 在这里插入图片描述

  1. ULCONn指定传输的数据帧,它由一个起始位、5到8个数据位、一个可选奇偶校验位和1到2个停止位组成。
  2. 发射机还可以产生中断条件,这迫使串行输出在一帧传输时间内处于逻辑0状态。在当前发送字被完全发送之后,该块发送中断信号。
  3. 在中断信号传输后,它将数据连续传输到Tx FIFO种(FIFO模式)或者Tx保持寄存器(非FIFO模式下)。

编程

  1. 设置引脚用于串口(GPH2),设置内部上拉,输出引脚时刻保持高电平
  2. 设置波特率**UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1 **
  3. 设置数据格式
  4. 发送(putchar)

相关寄存器

(1)串口格式控制寄存器(设置串口输出接收数据帧的格式)
在这里插入图片描述
(2)串口控制寄存器(选择串口的时钟源,时钟频率,中断)
在这里插入图片描述
(3)FIFO控制寄存器
在这里插入图片描述
uart.c

#include "s3c2440_soc.h"


/* 115200,8n1 */
void uart0_init()
{
	/* 设置引脚用于串口 */
	/* GPH2,3用于TxD0, RxD0 */
	GPHCON &= ~((3<<4) | (3<<6));
	GPHCON |= ((2<<4) | (2<<6));

	GPHUP &= ~((1<<2) | (1<<3));  /* 使能内部上拉 */
	

	/* 设置波特率 */
	/* UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
	 *  UART clock = 50M
	 *  UBRDIVn = (int)( 50000000 / ( 115200 x 16) ) –1 = 26
	 */
	UCON0 = 0x00000005; /* PCLK,中断/查询模式 */
	UBRDIV0 = 26;

	/* 设置数据格式 */
	ULCON0 = 0x00000003; /* 8n1: 8个数据位, 无较验位, 1个停止位 */

	/*  */

}

int putchar(int c)
{
	/* UTRSTAT0 */
	/* UTXH0 */

	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;
}
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:37:07  更:2021-10-12 23:37:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:00:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码