S3C2440串口学习

发布者:yunhui最新更新时间:2020-06-10 来源: eefocus关键字:S3C2440吗  串口学习  逻辑电平 手机看文章 扫描二维码
随时随地手机看文章

串口是嵌入式中常用的通信方式,他使用逐位发送,逐位接收。串行通信。串口有许多功能,诸如打印调试,连接各种模块。他安全可靠,连接简易所以被广泛使用。


串口通讯的基本定义:

1.波特率

2.格式:数据位,停止位,校验位,流量控制。

3.发送机与接收机用TX与RX相连接


USART的逻辑电平

原来TX(即发送控制端)为高电平,ARM给予拉低并且保持1Bit的时间。PC机在低电平时开始计时,因为发送机于接收机之间有约定好的波特率,即按照约定好的波特率每隔一段时间读取一次发送引脚的电平。(一般是读取一个Bit中间时间的值),这样循环八次就完成了一个字节的接收。在接受完一个字节之后,以一个约定好的停止位结束本次字节的接收(停止位一般为1-2位数据)。在有些情况下,在八位数据与停止位的中间还会带有一个校验位。(一般为奇数偶数校验位,即一个字节中高电平的个数)。


串口存储:

因为是逐位发送的,在每接收到一位数据后会存入芯片中的FIFIO等待内存把他取出,取出之后再存入。


串口发送速度:

例如115200的波特率,一秒发送的Bit数目为115200/10=11520Bit


接下来我们开始分析编写USART的代码:

1.首先我们先从数据手册分析查看寄存器的配置:

GPH2与GPH3分别可以可以配置为串口0的TX与RX(即发送接收模式)

所需的条件是GPFCON[5:4]=10与GPFCON[7:6]=10

在这里插入图片描述

上面说过,串口不工作的时候引脚的电平默认为高电平

在这里插入图片描述

我们这里将GPH引脚初始化为高电平,即GPHUP[2]为1;

这样我们的引脚初始化就完成了。


2.接着我们来设定波特率

首先我们在手册中找到波特率的计算公式:

在这里插入图片描述

UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1

由此可以计算得到UBRDOVn= 50000000/(115200*16)-1=26

所以向UBRDIV0写入26

在这里插入图片描述

由模式设置寄存器中查的应向UCON0寄存器中写入0x00000005


3.设置完这些后,接下来我们设置串口的数据模式

由数据手册的列表中中得到: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;

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

接着来写一个打印函数,这里也罗列出来:



int puts(const char *s)

{

while (*s)

{

putchar(*s);

s++;

}

}在这里插入代码片

1

2

3

4

5

6

7

8

9

到这里就基本完成整个实验了,可以下载到开发板里面去试试开机的时候串口是否有打印出Hello World


备注:

实验代码:


在这里#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++;

}

}

关键字:S3C2440吗  串口学习  逻辑电平 引用地址:S3C2440串口学习

上一篇:s3c2440芯片串口操作
下一篇:s3c2440串口使用

推荐阅读最新更新时间:2024-11-12 14:53

基于STM32的HAL库学习(2)UART串口学习
1、串口的模式有3种,一是查询模式,二是中断模式,三是DMA模式 HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制 HAL_UART_Receive();串口轮询模式接收,使用超时管理机制 HAL_UART_Transmit_IT();串口中断模式发送 HAL_UART_Receive_IT();串口中断模式接收 HAL_UART_Transmit_DMA();串口DMA模式发送 HAL_UART_Transmit_DMA();串口DMA模式接收 2、阻塞传输是调用这个函数并在等待时间内一直等待操作完成。 HAL_UART_Transmit HAL_UART_Receive
[单片机]
STM32CubeMX学习教程之九:串口与DMA
本篇主要讲述如何通过DMA向串口输出数据。 软件: STM32CubeMX V4.25.0 System Workbench V2.4 固件库版本: STM32Cube FW_F1 V1.6.1 硬件: OneNet 麒麟座V2.3 在STM32CubeMX中新建项目,选择正确的MCU型号 首先设置RCC和SYS,如下图 然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),如下图 配置USART1为Asychronous模式 可以看到PA9和PA10被配置为了USART1_TX, USART1_RX
[单片机]
STM32CubeMX<font color='red'>学习</font>教程之九:<font color='red'>串口</font>与DMA
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved