uart_dma.c 2.1 KB
#include "uart_dma.h"
#include "my_ringbuff.h"
#include "string.h"
#include "dma.h"
#include "stdio.h"
#include "ildaFile.h"
#include "dataParsing.h"


#define DMA_DATA_LENTH_MAX	(1024*5)

uint8_t RecDmaBuff[DMA_DATA_LENTH_MAX] = {0};
uint8_t SendDmaBuf[512] = {0};



//串口 DMA 初始化
void UartDMA_Init(void)
{
	//设置接收
	LL_DMA_SetMemoryAddress(DMA2,LL_DMA_STREAM_2,(uint32_t)RecDmaBuff);
	LL_DMA_SetPeriphAddress(DMA2,LL_DMA_STREAM_2,LL_USART_DMA_GetRegAddr(USART1));
	LL_DMA_SetDataLength(DMA2,LL_DMA_STREAM_2,DMA_DATA_LENTH_MAX);
	
	//设置发送
	LL_DMA_SetMemoryAddress(DMA2,LL_DMA_STREAM_7,(uint32_t)SendDmaBuf);
	LL_DMA_SetPeriphAddress(DMA2,LL_DMA_STREAM_7,LL_USART_DMA_GetRegAddr(USART1));
	LL_DMA_SetDataLength(DMA2,LL_DMA_STREAM_7,0);
	
	LL_USART_EnableIT_IDLE(USART1);
	LL_USART_EnableDMAReq_RX(USART1);
	LL_USART_EnableDMAReq_TX(USART1);
	
	LL_DMA_EnableStream(DMA2,LL_DMA_STREAM_2);
	LL_DMA_EnableStream(DMA2,LL_DMA_STREAM_7);
}


uint16_t testLen = 0;
uint32_t count = 0;

//串口接收
int8_t UartIDLE_Recive_Data(void)
{
	LL_DMA_DisableStream(DMA2,LL_DMA_STREAM_2);
	//清除接收空闲中断标志
	LL_USART_ClearFlag_IDLE(USART1);
	
	LL_DMA_ClearFlag_TC2(DMA2);
	
	//接收到一帧数据后 电平翻转,
	LL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);
			
	testLen = DMA_DATA_LENTH_MAX - LL_DMA_GetDataLength(DMA2,LL_DMA_STREAM_2);
	
	//将实际接收到的数据入队
	
	ringBufWrite(Uart1RingBufHandle,(char*)RecDmaBuff,testLen);
	
//	memcpy(IldaFileBuf+count,RecDmaBuff,testLen);
	
	count+=testLen;
//	ringBufWrite(Uart1RingBufHandle,RecDmaBuff,testLen);
	
//	printf("%d %d %d\r\n",testLen,count,strlen((char*)IldaFileBuf));
	
	
	//LL_DMA_IsActiveFlag_HT2(DMA2);	//dma半满中断
	//LL_DMA_IsActiveFlag_TC2(DMA2);	//dma传输完成中断
	
	LL_DMA_SetDataLength(DMA2,LL_DMA_STREAM_2,DMA_DATA_LENTH_MAX);
	
	//使能
	LL_DMA_EnableStream(DMA2,LL_DMA_STREAM_2);
	
	return 0;
}



//串口发送
int8_t Uart_DMA_Send(uint8_t* data,uint16_t size)
{
	if(LL_USART_IsActiveFlag_TC(USART1))
	{
		LL_DMA_ClearFlag_TC7(DMA2);
		
		memcpy(SendDmaBuf,data,size);
		
		LL_DMA_DisableStream(DMA2,LL_DMA_STREAM_7);
		LL_DMA_SetDataLength(DMA2,LL_DMA_STREAM_7,size);
		LL_DMA_EnableStream(DMA2,LL_DMA_STREAM_7);
	}
	
	return 0;
}