嵌入式程序记录

C代码自用模块记录

串口模块头文件
头文件
// 串口模块定义
#define FIFO_NUM 50
typedef struct
{
	uint8_t Rx_Buf_Dma[50];//DMA中断接收缓存
	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 );
源文件
/************************************************
函数名称 : void Usart_Send
功    能 : 串口普通发送函数
参    数 : P--- 发送缓存首地址
            Length ------ 发送数据长度
            Usart_X ------ 串口选择  Usart_1, Usart_2
返 回 值 : 无
作    者 : W
*************************************************/
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;
    }
    
}

/*********************************************************************
// 函数: Send_Data_Dma
// 参数: 无
// 说明: 无
// 调用: 本地调用 外部调用
// 返回: 无
// 作者: W
// 日期: 2019/4/27
**********************************************************************/
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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值