#include "sys.h"
|
#include "BT.h"
|
#include "delay.h"
|
#include "string.h"
|
#include "mbrtu.h"
|
#include "para.h"
|
#include "sizhu_communication_protocol.h"
|
u8 BT_RX_BUFF[BT_RX_LENGTH];
|
//u8 BT_TX_BUFF[500];
|
u8 Data_send_flag=0;
|
|
void BT_data_clear( void )
|
{
|
|
/*Çå³ý´®¿ÚÖеÄDMAÊý¾Ý*/
|
DMA_Cmd(BT_DMARX_CH,DISABLE);
|
DMA_SetCurrDataCounter(BT_DMARX_CH, BT_RX_LENGTH);
|
DMA_Cmd(BT_DMARX_CH,ENABLE);
|
|
|
|
}
|
|
/*******************************************************************************
|
* Function Name: RS485_GPIO_Init
|
* Parameters: none
|
* Return: none
|
* Description:
|
******************************************************************************/
|
void BT_RS485_GPIO_Init(void)
|
{
|
// GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
}
|
|
|
|
void BT_Usart_Init(uint32 system_BaudRate)
|
{
|
USART_InitTypeDef USART_InitStructure;
|
DMA_InitTypeDef DMA_InitStructure;
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 , ENABLE);
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
|
|
USART_DeInit(BT_USARTNUM);
|
|
|
USART_InitStructure.USART_BaudRate = system_BaudRate;
|
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//word length 8bit
|
USART_InitStructure.USART_StopBits = USART_StopBits_1;//one stopbit
|
USART_InitStructure.USART_Parity = USART_Parity_No;
|
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
|
USART_InitStructure.USART_Mode =USART_Mode_Rx | USART_Mode_Tx;
|
USART_Init(BT_USARTNUM, &USART_InitStructure); //initialize USART
|
|
|
///////////////////////
|
/*DMA ½ÓÊÕ³õʼ»¯*/
|
/*¿ªÆôDMAʱÖÓ*/
|
|
DMA_DeInit(BT_DMARX_CH);
|
|
/*ÉèÖÃDMAÔ´£º´®¿ÚÊý¾Ý¼Ä´æÆ÷µØÖ·*/
|
DMA_InitStructure.DMA_PeripheralBaseAddr =(u32)(&(BT_USARTNUM->DR)) ;
|
|
/*ÄÚ´æµØÖ·(Òª´«ÊäµÄ±äÁ¿µÄÖ¸Õë)*/
|
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)(rs485_receive_g.RS485_BUF);
|
|
/*·½Ïò£º´ÓË«Ïòµ½ÄÚ´æ*/
|
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
|
|
/*´«Êä´óСDMA_BufferSize=SENDBUFF_SIZE*/
|
DMA_InitStructure.DMA_BufferSize = REC_LENGTH;
|
|
/*ÍâÉèµØÖ·²»Ôö*/
|
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
|
|
/*ÄÚ´æµØÖ·×ÔÔö*/
|
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
|
|
/*ÍâÉèÊý¾Ýµ¥Î»*/
|
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
|
|
/*ÄÚ´æÊý¾Ýµ¥Î» 8bit*/
|
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
|
|
/*DMAģʽ£º²»¶ÏÑ»·*/
|
//DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
|
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
|
|
/*ÓÅÏȼ¶£ºÖÐ*/
|
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
|
|
/*½ûÖ¹ÄÚ´æµ½ÄÚ´æµÄ´«Êä */
|
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
|
|
DMA_Init(BT_DMARX_CH, &DMA_InitStructure);
|
|
USART_DMACmd(BT_USARTNUM, USART_DMAReq_Rx, ENABLE);
|
|
DMA_Cmd(BT_DMARX_CH, ENABLE);
|
|
USART_Cmd(BT_USARTNUM, ENABLE);
|
|
USART_ClearITPendingBit(BT_USARTNUM, USART_IT_TC);//Çå³ýTC±êÖ¾
|
|
|
|
}
|
|
void BT_DATA_Init(void)
|
{
|
DMA_Cmd(BT_DMARX_CH,DISABLE);
|
DMA_SetCurrDataCounter(BT_DMARX_CH, BT_RX_LENGTH);
|
DMA_Cmd(BT_DMARX_CH,ENABLE);
|
memset(BT_RX_BUFF,0,sizeof(BT_RX_BUFF));
|
memset(ucRTUBuf,0,sizeof(ucRTUBuf));
|
}
|
|
void bt_send(u8 * data, u16 length)
|
{
|
u16 i;
|
u8 *ptr;
|
|
ptr = data;
|
for(i = 0; i < length; i ++)
|
{
|
USART_SendData(USART3, *ptr);
|
ptr ++;
|
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
|
}
|
|
|
|
}
|
void bt_rs485_send(u8 * data, u16 length)
|
{
|
u16 i;
|
u8 *ptr;
|
|
ptr = data;
|
|
|
if(v20_system_para_g.system_ble_connect == 1)
|
{
|
|
}else
|
{
|
PC_RS485_EN = 1;
|
delay_ms(1);
|
}
|
|
// Data_send_flag = 1;
|
// DMA_Cmd(DMA_RS485_TX_Channel,DISABLE);
|
// DMA_SetCurrDataCounter(DMA_RS485_TX_Channel,length);
|
// DMA_Cmd(DMA_RS485_TX_Channel,ENABLE);
|
USART_ClearFlag(USART3, USART_FLAG_TC);//¿ÉÒÔ½â¾öÓ²¼þ¸´Î»Ö®ºóµÚÒ»´Î·¢ËͶªµÚÒ»¸ö×Ö½ÚÎÊÌâ
|
for(i = 0; i < length; i ++)
|
{
|
USART_SendData(USART3, *ptr);
|
ptr ++;
|
while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);
|
}
|
|
PC_RS485_EN = 0;
|
|
}
|