Example #1
0
//------------------------------------------------------
void USART1_IRQHandler(void)
{
    if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
    {
        USART_SendData(USART1, UartBuf_RD(&UartTxbuf)); //环形数据缓存发送
        if(UartBuf_Cnt(&UartTxbuf)==0)
            USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//假如缓冲空了,就关闭串口发送中断
    }

    else if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
    {
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);//清除接收中断标志

        //此种环形缓冲数组串口接收方式,适用于解包各种数据,很方便。对数据的要求是:
        //发送方必须要求有数据包头,以便解决串口数据无地址的问题
        Udatatmp = (uint8_t) USART_ReceiveData(USART1);          //临时数据赋值


        UartBuf_WD(&UartRxbuf,Udatatmp);               //写串口接收缓冲数组

#ifdef BT_SRC_APP
        CommApp(Udatatmp);
#endif
#ifdef BT_SRC_PC
        CommPC(Udatatmp);
#endif

    }

}
void Crazepony_get_uartpack(void)
{
  static int rx_cnt;
  u8 rx_da;
  rx_cnt = UartBuf_Cnt(&UartRxbuf);
  while(rx_cnt -- )
  {
    rx_da = UartBuf_RD(&UartRxbuf);
    parse_package(rx_da);
  }
}
Example #3
0
//------------------------------------------------------
void USART1_IRQHandler(void)
{
  
  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
  {   
    USART_SendData(USART1, UartBuf_RD(&UartTxbuf)); //环形数据缓存发送
    if(UartBuf_Cnt(&UartTxbuf)==0)  USART_ITConfig(USART1, USART_IT_TXE, DISABLE);//假如缓冲空了,就关闭串口发送中断
  }
  
  else if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    //此种环形缓冲数组串口接收方式,适用于解包各种数据,很方便。对数据的要求是:
    //发送方必须要求有数据包头,以便解决串口数据无地址的问题
    Udatatmp = USART_ReceiveData(USART1);          //临时数据赋值
    UartBuf_WD(&UartRxbuf,Udatatmp);               //写串口接收缓冲数组
    
    if(UartBuf_Cnt(&UartRxbuf)==0) USART_SendData(USART1, 'E');//串口接收数组长度等于0时,发送接收数组空标志
    if(UartBuf_Cnt(&UartRxbuf)==UartRxbuf.Mask) USART_SendData(USART1, 'F');//串口接收数组长度等于掩码时,发送接收缓冲满标志
    USART_ClearITPendingBit(USART1, USART_IT_RXNE);//清除接收中断标志
  }
  
}
Example #4
0
/********************************************
              往蓝牙写入一个指令包
********************************************/
void Uart1SendaBTCmd(const char *p)
{
	char i;

	for(i=0; i<CmdreturnLength; i++) Cmdreturn[i] = 0; //释放指令接收缓存
	LedA_on;
	delay_ms(100);//写完一条指令,延时500ms再度接收缓存
	LedA_off;
	for(i=0; i<strlen(p); i++)
		UART1_Put_Char(*(p+i));
	delay_ms(100);//写完一条指令,延时500ms再度接收缓存


	i=0;
	while(UartBuf_Cnt(&UartRxbuf) != 0)     //当串口缓冲不为空时,将串口缓冲赋值给指令结果缓冲
		Cmdreturn[i++] = UartBuf_RD(&UartRxbuf);
}
Example #5
0
void RTtest(void)
{
	uint8_t i, cnTemp;
	cnTemp = UartBuf_Cnt(&UartRxbuf);
	if (cnTemp == 5)
	{
		for (i=0; i<cnTemp; i++)
		{
			UartBuf_WD(&UartTxbuf, UartBuf_RD(&UartRxbuf));
		}
		
			USART_ITConfig(USARTy, USART_IT_TXE, ENABLE);
	}
//	UartBufClear(&UartRxbuf);


}
Example #6
0
/********************************************
              往蓝牙写入一个指令包 (Bluetooth is written to a command packet)
********************************************/
void Uart1SendaBTCmd(const char *p)
{
  char i;
	
  for(i=0;i<CmdreturnLength;i++) Cmdreturn[i] = 0;//释放指令接收缓存 //Release command receive buffer
	LedA_on;
	delay_ms(100);//写完一条指令,延时500ms再度接收缓存 //Finished an instruction 500ms delay once again receive buffer
	LedA_off;
  for(i=0;i<strlen(p);i++)
  UART1_Put_Char(*(p+i));  
  delay_ms(100);//写完一条指令,延时500ms再度接收缓存 //Finished an instruction 500ms delay once again receive buffer
	
	
  i=0;
  while(UartBuf_Cnt(&UartRxbuf) != 0)     //当串口缓冲不为空时,将串口缓冲赋值给指令结果缓冲 //When the serial buffer is not empty , the serial buffer is assigned to command the result buffer
  Cmdreturn[i++] = UartBuf_RD(&UartRxbuf);
}
Example #7
0
void interrupt VectorNumber_Vsci1 SCI1_ISR(void)
{
	volatile uint8_t datatemp = 0;
	//如果发送器中断使能且发送器空则表明触发发送器中断

	


	if (SCI1CR2_TIE & SCI1SR1_TDRE){
		
		if (UartBuf_Cnt(&UartTxbuf))
			SCI1DRL = UartBuf_RD(&UartTxbuf);
		else{
			SCI1CR2_TIE = 0;//如果发送缓存空,则关闭发送中断
		}

	}
	else if (SCI1SR1_RDRF|SCI1SR1_OR ){

		Chartemp = (uint8_t)SCI1DRL;
		led_printf(Chartemp);
		UartBuf_WD(&UartRxbuf, Chartemp);

		//printf("%c", Chartemp);
	}


		//
		//    static i = 0;
		//    unsigned char ch;
		//    ch = SCI1_Read();
		//	SCI1_Send(ch);
		//    if (ch == SEND_HEAD)
		//    {
		//       i = 0;
		//    }
		//    g_STBuf[i++] = ch;
		//    if (i == 4)
		//    {
		//        i = 0;
		//        g_SCI1_READ_flag = 1;
		//    }
}
Example #8
0
void USARTy_IRQHandler(void)
{
//	uint8_t i;
	if (USART_GetITStatus(USARTy, USART_IT_TXE) != RESET)
	{
		USART_SendData(USARTy, UartBuf_RD(&UartTxbuf));
		if(UartBuf_Cnt(&UartTxbuf) == 0 )
			USART_ITConfig(USARTy, USART_IT_TXE, DISABLE);
	}

	else if(USART_GetITStatus(USARTy, USART_IT_RXNE) != RESET)
	{
		USART_ClearITPendingBit(USARTy, USART_IT_RXNE);//清除接收中断标志
		UdataTemp = (uint8_t)USART_ReceiveData(USARTy);

		UartBuf_WD(&UartRxbuf, UdataTemp);//写串口接收缓冲数组

	}

}