C代码自用模块记录
串口模块头文件
头文件
#define FIFO_NUM 50
typedef struct
{
uint8_t Rx_Buf_Dma[50];
uint8_t Rx_Buf[50];
uint8_t Tx_Buf[80];
uint8_t Txd_Flag;
uint8_t Rxd_Flag;
uint8_t Receive_Length;
uint8_t Tx_Length;
}
Struct_Usart_DMA;
typedef enum { Uart1=0, Uart2} Function_Uart;
void USART1_Init( void );
void USART2_Init( void );
uint8_t Send_Data( uint8_t *P, uint16_t Length, Function_Uart Usart_X );
uint8_t Send_Data_Dma( uint8_t *Data, uint8_t Length, Function_Uart UartX );
源文件
uint8_t Send_Data( uint8_t *P, uint16_t Length, Function_Uart Usart_X )
{
uint16_t i;
USART_TypeDef *USARTx =NULL;
switch( Usart_X )
{
case Uart1:
{
USARTx = USART1;
}
break;
case Uart2:
{
USARTx = USART2;
}
break;
}
if( USARTx == NULL )
return 0;
else
{
for(i=0;i<Length;i++)
{
USART_SendData(USARTx,P[i]);
while( USART_GetFlagStatus(USARTx,USART_FLAG_TC)!= SET);
}
return 1;
}
}
uint8_t Send_Data_Dma( uint8_t *Data, uint8_t Length, Function_Uart UartX )
{
switch( UartX )
{
case Uart1:
{
if( 0 == Usart1_DMA.Txd_Flag )
{
Usart_DMA2_TX_EN((uint32_t)Data, (uint32_t)(&(USART1->TDR)), Length);
return 1;
}
else
return 0;
}break;
case Uart2:
{
Usart2_DMA4_TX_EN((uint32_t)Data, (uint32_t)(&(USART2->TDR)), Length);
return 1;
}
break;
}
}