mini2440裸机试炼之——Uart与pc端实现文件、字符传输

发布者:Jikai最新更新时间:2020-07-04 来源: eefocus关键字:mini2440  Uart  pc端  文件  字符传输 手机看文章 扫描二维码
随时随地手机看文章

1、波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号。


2、非FIFO模式,即传输数据不利用FIFO缓存,一个字节一个字节地传输。


3、接收到的数据是放到接收缓存器URXHn中,要发送数据时,是把数据放入发送缓存器UTXHn中。由于UART是通过字节方式传输数据的,因此要区分是大端模式还是小端模式,也就是说这两个寄存器在这两种模式下,所在的地址是不同。为了了解当前数据传输的各种状态,还需要一些状态寄存器。传输状态寄存器UTRSTATn非常有用,它的第0位可以用来判断接受缓存器内是否有可接收的数据,第1位和第2位可以用来判断发送缓存器中是否为空,为空时可以发送数据。由于在这里我们不进行传输数据时错误的判断,因此错误状态寄存器UERSTATn不需要,FIFO状态寄存器UFSTATn和MODEM状态寄存器UMSTATn在这里也不需要。


本来是想使用中断方式接收和发送的,但是只实现发送接收一个字符。


之后试下查询方式,结果能行。


Uart方框图

1、使用非FIFO模式时,接收、发送缓存寄存器只存一个字节


2、时钟源使用PCLK(50000000),波特率为115200;

UBRDIVn= (int)( UART时钟 / ( 波特率 ×16) ) – 1   


配置GPH

rGPHCON|=((2<<4)|(2<<6));    //设置GPH2、GPH3为TXD0、RXD0功能


rGPHUP=0x00;               //上拉电阻使能


设置Uart寄存器

rUFCON0 = 0x0;              //禁止FIFO


rUMCON0 = 0x0;             //禁止AFC


UCONn控制寄存器:

rUCON0=0x05;                //发送模式和接收模式都使用查询模式


ULCONn控制寄存器:

rULCON0|=0x03;              //设置UART0数据发送8个数据位


赵老师的一段话(关于中断的,作为笔记):


最后还要强调几点关于非FIFO模式下UART中断的一些注意事项:

1.对于s3c2440来说,接收数据是被动的,发送数据是主动的,因此一般来说,接收数据用中断方式,发送数据用查询方式较好;

2. 在中断方式下,当接收到数据时,尽管可能该数据无用,但也一定要读取它,否则下次再接收数据时,不会再引起中断,因为接收数据缓存器被上次接收到的数据所霸占,只要没有读取它,它就永远在那里;

3. 由于UART中断涉及到SUBSRCPND寄存器,因此在中断处理程序中不仅要清SRCPND寄存器,还要清SUBSRCPND寄存器,它们的顺序一定是先清SUBSRCPND寄存器,再清SRCPND寄存器,否则就会引起一个中断两次响应的问题。因为是否中断由SRCPND寄存器决定,而SRCPND寄存器的相关状态位由SUBSRCPND寄存器决定,如果先清SRCPND寄存器,而还没有清SUBSRCPND寄存器的话,SRCPND寄存器的相关位还是会被置1,而一旦被置1,则一定还会引起中断。


总结:

使用查询方法确实可以通过PC端的串口工具发送文件或者字符串,再通过uart0接收文件或字符串发送给PC端的串口工具和存储于文件uart.txt中,但是过程中会出现字符丢失(发送回PC端串口工具和文件中都是一样的情况)的情况,现在感觉可能是串口工具同步的问题或者机器之间的延迟问题,时间的延迟并不会影响串口之间数据传输


代码区:

Main.c


#define GLOBAL_CLK      1

 

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"  //函数声明

#include "2440slib.h"

#include "mmu.h"

#include "profile.h"

 

extern void Uart(void); 

void Main(void)

{       U32 mpll_val = 0,consoleNum;

    Port_Init();

   

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

    

    //init FCLK=400M,

    ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);

    ChangeClockDivider(14, 12);   //the result of rCLKDIVN [0:1:0:1] 3-0 bit

    cal_cpu_bus_clk();            //HCLK=100M   PCLK=50M

   

    

    MMU_Init(); //地址映射初始化

    

    Beep(2000, 100);   

    

Uart();            //实现串口传送文件 字符串到开发板,并显示在串口终端(调试成功!) 

}


Uart.c


#include "2440addr.h" 

#include "def.h"

#include "2440lib.h"

#include    //文件库函数

 

void Uart_init(){

//以下使用uart0

 

    rGPHCON&=~((3<<4)|(3<<6));  //GPH2--TXD0;GPH3--RXD0

    rGPHCON|=((2<<4)|(2<<6));    //设置GPH2、GPH3为TXD0、RXD0功能

//手册中GPH2、GPH3描述如下:

//GPHCON        Bit         Description

//GPH3         [7:6]        00 = Input      01 = Output   

//                          10 = RXD0       11 = reserved

//GPH2         [5:4]        00 = Input      01 = Output

//                          10 = TXD0       11 = Reserved 

    

    rGPHUP=0x00;                //上拉电阻使能

    rUFCON0 = 0x0;              //禁止FIFO

    rUMCON0 = 0x0;              //撤销nRTS

    rULCON0|=0x03;              //设置UART0数据发送8个数据位

    rUCON0=0x05;                //发送模式和接收模式都使用查询模式

    

    //设置波特率,其中波特率作为一个参数传递到该初始化函数

    rUBRDIV0=(int)((50000000/(115200*16))-1);  

    Delay( 10 ) ;

       

}

    

 

void Uart(){

    int i=0;

    char ch;

    FILE *FP;                                           //文件指针

    FP=fopen("uart.txt","w");  //以写方式打开uart.txt文件

    Uart_init();                                        //uart初始化函数

 

    while(1){

    if(rUTRSTAT0&1) {            //如果接收数据缓存器接收到有效数据

    

         ch = rURXH0;            //ch存储接收字节数据

         rUTXH0=ch;              //PC机将接收的字符通过串口调试工具显示在屏幕上 

         

         fputc(ch,FP);                //将ch字符内容存进文件中

         i++; if(i>200) fclose(FP);   //如果有200个字节关闭文件       

     }

    }

    

}


结果截图:

1、PC端串口工具

2、Uart.txt是存储于项目2440test_DataDebugRel_bin目录下,与bin文件同一目录

关键字:mini2440  Uart  pc端  文件  字符传输 引用地址:mini2440裸机试炼之——Uart与pc端实现文件、字符传输

上一篇:mini2440裸机试炼之IIS——音乐播放器
下一篇:mini2440裸机试炼之—计算器(LCD显示,触摸屏中断)

推荐阅读最新更新时间:2024-11-11 00:21

2.关于MINI2440下载的问题
1.打开快速下载工具选择Linux 2.在选择Images目录中选择压缩包下的images 3.修改Liunx Kernel,选择对应的屏幕类型 4.点击开始烧写 5.点击快速启动 6.运行的效果 7.使用SD卡脱机快速安装系统的方法 Mini2440已经支持通过SD卡脱机烧写系统,即烧写系统不再需要PC和USB数据线,这个功能需要借助Nor Flash中的Superboot来进行,Mini2440开发板在出厂时已经往Nor Flash中烧写好Superboot,无需客户自行烧写,你只需要做的是: 准备一张SD卡,先将SD卡格式化为FAT格式,然后将2440光盘下整个image目录拷到SD卡中。 默
[单片机]
2.关于<font color='red'>MINI2440</font>下载的问题
[零基础学习STM32]第四讲:UART通讯实验—控制LED
一、概述 1、UART简介 UART:通用同步/异步串行接收/发送器,由时钟发生器、数据发送器和接收器三大部分组成。UART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。STM32F407IGT6具有6个UART收发器,可使用相应的代码使能后使用。 2、UART特点 全双工操作(相互独立的接收数据和发送数据)。 同步操作时,可主机时钟同步,也可从机时钟同步。 支持8和9位数据位,1或2位停止位的串行数据桢结构。 由硬件支持的奇偶校验位发生和检验。 数据溢出检测。 帧错误检测。 包括错误起始位的检测噪声滤波器和数字低通滤波器。 三个完全独立的中断,TX发送完成、TX发送数据寄存器空、R
[单片机]
[零基础学习STM32]第四讲:<font color='red'>UART</font>通讯实验—控制LED
DMA和UART的深刻认识--串口接收的3种工作方式(附STM32F4代码)
可能会遇到的问题: 1.能实现接收但不发送 注意是否是识别函数出错 2.DMA单次传输模式要求再初始化,否者出现第二次中断不执行。使用循环模式出现的问题是要结合配置公式: 3.DMA再次初始化不完全,会出现接收一次成功,再来一次不行。第三次能接收的问题 4.串口调试连续点击的次数太快,会使的里面的发送程序出错 一.串口uart中断接收 遇到的问题: 1、串口调试接收引脚坏掉 2.接收数据识别,使用的库函数出错 串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO 时钟使能。 2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。 3) GPIO 初始
[单片机]
DMA和<font color='red'>UART</font>的深刻认识--串口接收的3种工作方式(附STM32F4代码)
linux内核中的文件描述符(二)--socket和文件描述符
Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blog.csdn.net/ce123) socket和文件系统紧密相关,我们可以通过文件系统的open、read、write和close等操作socket。下面是一个简单的例子。 view plain copy print ? /****************************************************************************/ /*简介:TCPServer示例 */ /*******************
[单片机]
linux内核中的<font color='red'>文件</font>描述符(二)--socket和<font color='red'>文件</font>描述符
mini2440串口模块总结
一.串口工作原理: 1.由上面的串口电路可知具体流程如下: 发送:写数据——》buffer—》shifter—》TXDn-- RSTXDn--- PC 接收:PC---》RSRXDn---》RXDn--- shifter-- buffer--- 取数据 2.由上图可知, buffer有两种模式,FIFO模式 和 Non-FIFO模式。 如果使用FIFO模式,则需要配置FIFO Register,具有64 字节的缓存可用。 如果使用Non-FIFO模式,则不需要配置FIFO Register,但是只具有一个字节的缓存可用。 3.做串口模块的具体流程: 1 .从串口电路图中可以知道,我们首先应
[单片机]
<font color='red'>mini2440</font>串口模块总结
stm32 启动文件解析
;******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** ;* File Name : stm32f10x_vector.s ;* Author : MCD Application Team ;* Version : V2.0.2 ;* Date : 07/11/2008 ;* Description : STM32F10x vector table for RVMDK toolchain. ;* This module performs: ;*
[单片机]
政府文件表明Apple Watch将支持在巴西与日本开启ECG功能
随着苹果继续扩大对 Apple Watch Series 4 / Series 5 的 ECG 功能提供全球支持,巴西和日本有望成为最新启动心电图功能的市场区域。Mac Otakara 报道称,日本制药和医疗器械局(PMDA)更新了外国制造商的注册清单,并将苹果列为了认证实体,意味着 Apple Watch 智能手表可能通过了有关药品 / 医疗器械的质量、有效性和法律合规性的评估。   虽然 PMDA 未明确提及苹果的认证性质,但不难猜测它与 Apple Watch 智能手表的心电图(ECG)功能有关。   此前苹果由于未能获得医疗器械审批,而在许多市场区域屏蔽了 Apple Watch 的 ECG 功能(某些情况下连心
[手机便携]
stm32 mmc卡写文件然后读出来 串口输出
硬件环境:神州一号板 软件环境:MDK 1、sd卡硬件初始化 PA5---------CLK PA6---------MISO PA7---------MOSI PB7---------CS void TurnToSD(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_A
[单片机]
stm32 mmc卡写<font color='red'>文件</font>然后读出来 串口输出
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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