当前位置:首页 > 单片机 > 单片机
[导读]#ifndef __DEBUGSERIAL_H_#define __DEBUGSERIAL_H_#include "sys.h"#include "stdio.h"extern u8 serialBuffer[256];extern u16 serialStatus;//?void Debug_Serial_Init(u32 baud);void Debug_Serial_Send_Byte(u8

#ifndef __DEBUGSERIAL_H_

#define __DEBUGSERIAL_H_

#include "sys.h"

#include "stdio.h"

extern u8 serialBuffer[256];

extern u16 serialStatus;

//?

void Debug_Serial_Init(u32 baud);

void Debug_Serial_Send_Byte(u8 dat);

void Debug_Serial_Send_Buffer(u8 length,u8*buffer);

#endif

#include "debugSerial.h"

//加入printf支持

#pragma import(__use_no_semihosting)

struct __FILE

{

int handle;

/* Whatever you require here. If the only file you are using is */

/* standard output using printf() for debugging, no file handling */

/* is required. */

};

FILE __stdout;

_sys_exit(int x)

{

x=x;

}

int fputc(int ch,FILE*f)

{

while(!((LPC_UART0->LSR)&0x20)); //等待判断LSR[5](即THRE)是否是1,1时表示THR中为空

LPC_UART0->THR=(u8)ch; //发送数据

returnch;

}

//定义一个256字节的缓冲区用于存放接收到的串口数据信息

//定义一个16位数据同时保存接收数据长度以及接收数据的状态

u8 serialBuffer[256]={0};

u16 serialStatus=0;

//16字节的状态

//低八位为当前存储的有效数据长度

//15位为接收完成等待处理标志

//8位表示当前已经接受到回车符r

//第9到十四位表示在等待处理期间系统冗余发送的数据量

//用于后期通讯系统的负载自适应

void TransSerialsCommand(u8 res)

{

u8 lostCount;

u8 receiveCount;

//接收数据处理

if(serialStatus&(1<<15))//已经接收完成,这个数据被抛弃

{

lostCount=((u8)(serialStatus>>9))&0x3f;//漏掉的数据计数

if(lostCount<0x3f)lostCount++;

serialStatus&=~(0x3f<<9);

serialStatus|=(lostCount<<9);

}

else//上一个命令没有接收完

{

if(serialStatus&(1<<8))//接收到r

{

//等待接收N

if(res=='n')

{

//接收完成

serialStatus|=0x8000;

}

else//不是n,这一次命令作废

{

serialStatus=0;

}

}

else//没收到r

{

if(res=='r')

{

serialStatus|=0x0100;

}

else

{

receiveCount=(u8)(serialStatus&0xff);

if(receiveCount<255)

{

serialBuffer[receiveCount]=res;

receiveCount++;

serialStatus&=0xff00;

serialStatus|=receiveCount;

}

else

{

//数据溢出,清空

serialStatus=0;

}

}

}

}

}

void UART0_IRQHandler(void)

{

u8 status=0;

u8 res=0;

//清除串口中断挂起

NVIC_ClearPendingIRQ(GPIO_IRQn);

//清除串口接收中断

if(!(LPC_UART0->IIR&0x01))//确认有中断发生

{

status=LPC_UART0->IIR&0x0e;

if(status==0x04)//确认是RDA中断

{

//读取串口接收值

res=(LPC_UART0->RBR&0xff);

//处理串口接收值

TransSerialsCommand(res);

}

}

}

void Debug_Serial_Init(u32 baud)

{

LPC_SC->PCONP|=(1<<3)|(1<<15); //打开时钟

//配置io口

LPC_IOCON->P0_2=0x00; //选择TXD功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P0_2|=(1<<0)|(2<<3); //上拉

LPC_IOCON->P0_3=0x00; //选择RXD功能,禁止迟滞 不反向 正常推挽

LPC_IOCON->P0_3|=(1<<0)|(2<<3); //上拉

LPC_UART0->LCR=0x83; //设置串口数据格式,8位字符长度,1个停止位,无校验,使能除数访问

LPC_UART0->DLM=((ApbClock/16)/baud)/256; //除数高八位 , 没有小数情况

LPC_UART0->DLL=((ApbClock/16)/baud)%256; //除数第八位

LPC_UART0->LCR=0x03; //禁止访问除数锁存器,锁定波特率

LPC_UART0->FCR=0x00; //禁止FIFO

LPC_UART0->IER = 0x01; //使能接收中断RDA

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

平时使用串口打印出现乱码的,绝大部分原因是串口波特率没对。那么,我们怎么测量实际的波特率呢?在这之前,顺便一起回顾一下波特率的概念。什么是波特率、比特率?比特率(Bitrate)表示每秒钟传输的二进制位数,单位为比特每秒...

关键字: 串口通讯

USR-N580是有人物联网新开发的一款工业级8串口服务器,8串口独立工作、互不影响;双网口设计,支持交换机功能,可级联,有效扩展串口数量;采用Arm Cortex-M7方案,数据传输速度快且稳定可靠;内部集成TCP/I...

关键字: 物联网 RS485 串口通讯 串口 串口服务器 交换机

  引 言   近年来,由于我国社会经济的快速发展和人们生活方式的转变,心血管病发病率及相关危险因素呈不断上升趋势,人们也越来越注意自己的身心健康。过去测量血压必须到医院,由医生用水银血

关键字: 电子血压计 脉搏波 lpc1788 s0012a

点击上方嵌入式开发圈 记得关注我们哦! 【134.1   应用层的“半双工”和“全双工”。】        应用层的“半双工”。主机与从机在程序应用层采用“一问一答”的查询模式,主机是主动方,从机是被动方,主机问一句从机...

关键字: 应用层 串口通讯 双机

单片机在控制本地的外围期间时,信息的交互是通过8位并行数据总线进行的,但是在较大规模的现代控制系统中,单片机还需要控制远端的设备,可以利用单片机的串行通信模块,在学习了RS-232串口通信的原理和时序后,学习了利用RS-...

关键字: 串口通讯 单片机 数据传输

在学习单片机和进行单片机产品开发过程中,我们通常使用仿真器作为调试程序的有力工具。但仿真器价格昂贵,对于初学者和一般个人开发人员很难承受。为此,我们选用了带ISP 功能的AT89S51/52 系列单片机,不需要仿真器也能...

关键字: 串口通讯 在线系统 可编程器

一、串口通讯常识1.串口角色解析2.串口通讯参数串口通讯,分为同步通讯和异步通讯,我们通常使用的都是异步串口。通讯时,双方先约定好数据帧的格式,即波特率,数据位,停止位,奇偶校验位等。波特率:这是一个

关键字: 串口通讯 驱动程序

资源使用说明:2410+LINUX、UART(即RS-232串口)全双工通信、RS-485半双工通信局部程序框图及其设计说明:调试记录及调试结果:MODBUS总结:...

关键字: 2410 串口通讯 modbus协议 ascii模式

#ifndef __MYIIC_H_#define __MYIIC_H_#include "common.h"#include "delay.h"#include "de...

关键字: io口 lpc1788 模拟iic

首先是gpio中断,这一点和1768不同,1768使用的中断时和eint3共用中断通道,到了1788,专门为gpio开辟了中断#ifndef __JOYPAD_H_#define __JOYPAD_H_#include...

关键字: lpc1788 外部中断 gpio中断
关闭
关闭