#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; }