笔记:合泰单片机BH66F2652开发(五)UART

笔记:(五)UART串口驱动

#include "uart.h"
/*串口通信
*只此一组UART
*PA5->RX   PA4->TX
*/
#include "include.h"
/*******************************************************************************
 * fuction	uart_init
 * brief	串口初始化函数
 * param	无
 * return	无
 *******************************************************************************/
void uartInit()
{
    
    
/*	UartEnableConfig();*/
	UartPinConfig();
	UartBuadRateConfig();
/*	UartInterruptConfig();*/
	configuart_1();	
}
/*******************************************************************************
 * fuction	sendSingleByte
 * brief	串口发送一个字节函数
 * param	SingleByte:单字节数据
 * return	无
 *******************************************************************************/
char readUsrReg =0;
void uartsendOneByte(char SingleByte)
{
    
    
	readUsrReg=_usr;
    _txr_rxr = SingleByte;
    while(!_tidle);//等待发送完成   0:数据传输中  1:无数据传输
}
/*******************************************************************************
 * fuction	uartSendBuff
 * brief	串口发送多个字节函数
 * param	uartData:多字节数据     length:数据长度
 * return	无
 *******************************************************************************/
void uartSendBuff(char *uartData, char length)
{
    
    
	unsigned char i;
	for(i=0; i<length; i++)
	{
    
    
		uartsendOneByte(uartData[i]);
	}
}
/*******************************************************************************
 * fuction	UartRxISR	
 * brief	串口中断服务子程序
 * param	UartRxISR:函数名     uartVector:中断向量
 * return	无
 *******************************************************************************/ 
/*char data_buff[4] = {0xAB,0x11,0x22,0xCD};*/
char data_buff[3] = {
    
    0};
DEFINE_ISR(UartRxISR,uartVector)
{
    
    
	int i = 0;
    int buff_length;
    if(_perr || _nf || _ferr || _oerr)
    {
    
    
    	readUsrReg = _usr;	
    	readUsrReg = _txr_rxr;
    	RxBuffSizeCnt = 0;
    }
    else
    {
    
    
    	if(_rxif)//接收寄存器状态标志位    0:TXR_RXR寄存器为空    1:TXR_RXR寄存器含有有效数据
    	{
    
    
    		UartRxBuff[RxBuffSizeCnt] = _txr_rxr;
    		RxBuffSizeCnt++;
    		if(RxBuffSizeCnt==3)
    		{
    
    
    			if((UartRxBuff[0]==0x53)&&(UartRxBuff[2]==0x50))
    			{
    
    
		    		if(UartRxBuff[1]==0x31)//BLE通过串口给MCU发送S:1:P  OTA进行时
		    		{
    
    
		    			BLEOTA = 1;
		    			for(i=0;i<RxBuffSizeCnt;i++)
		    			{
    
    
		    				data_buff[i] = UartRxBuff[i];
		    			}
		    			uartSendBuff(data_buff,sizeof(data_buff));
		    			RxBuffSizeCnt = 0;
		    			memset(UartRxBuff,0,sizeof(UartRxBuff));
		    		}
		    		else if(UartRxBuff[1]==0x32)//BLE通过串口给MCU发送S:2:P	OTA结束
		    		{
    
    
		    			BLEOTA = 0;
		    			for(i=0;i<RxBuffSizeCnt;i++)
		    			{
    
    
		    				data_buff[i] = UartRxBuff[i];
		    			}
		    			uartSendBuff(data_buff,sizeof(data_buff));
		    			RxBuffSizeCnt = 0;
		    			memset(UartRxBuff,0,sizeof(UartRxBuff));
		    		}
    			}
    		}
    	}
    }
}
#ifndef _UART_H
#define _UART_H

#include "BH66F2652.h"

#define  uartVector 0x28
#define  uartTXMaxLength	16	
#define  uartRXMaxLength	16	  
volatile unsigned char  RxBuffSizeCnt = 0; 
volatile unsigned char 	UartTxBuff[uartTXMaxLength];
volatile unsigned char 	UartRxBuff[uartRXMaxLength];

#define UartEnableConfig()	  {_uarten = 1;_rxen = 1;_txen = 1;}
#define UartDisableConfig()   {_uarten = 0;_rxen = 0;_txen = 0;}
#define UartPinConfig()       {_papu4=0; _papu5=0; _pas13=0; _pas12=1; _pas11=1; _pas10=0;}
#define UartBuadRateConfig()  {_bno=0; _prt=0; _stops=0; _brgh=0; _brg=0x0c;} //9600
#define UartInterruptConfig() {_urf=0; _ure=1; _adden=1; _txif=0; _emi=1; _ure=1; }

/*#define UartInterruptConfig() {_urf=0; _ure=1; _adden=1; _txif=0; _emi=1; _ure=1; }*/
/*#define UartInterruptConfig() {_rie=1;_urf=0; _ure=1; _adden=1; _txif=0; _emi=1;}*/

#define configuart_1()  {_ucr1 = 0x00;_adden = 0;  _rie   = 1;_tiie = 1;_teie = 1; _uarten = 1;_rxen = 1;_txen = 1;_urf = 0;_txif = 0; _ure = 1; _emi = 1; _ure = 1;}

extern void uartInit();
extern void uartsendOneByte(char SingleByte);
extern void uartSendBuff(char *uartData, char length);
extern unsigned char MeasureBuffData[7];
extern void SendMeasureData(void);

#endif
/*--------------------------------END THE FILE-----------------------------------*/

猜你喜欢

转载自blog.csdn.net/FutureStudio1994/article/details/114128020