keil/include/drivers/Usart1.c
@@ -8,7 +8,7 @@
//#include "Rcc_Nvic_Systick.h"
//数据发送队列变量
EUART1_Frame m_EUART1_TxFrames[EUART1_TX_FRM_SIZE];   //数据发送帧队列
EUART1_Frame m_EUART1_TxFrames[EUART1_TX_FRM_SIZE];   //数据发送帧队列
volatile int8_t m_EUART1_TxFrm_Tail = 0;               //数据发送帧队列尾指针
volatile int8_t m_EUART1_TxFrm_Head = 0;               //数据发送帧队列头指针
volatile int8_t m_EUART1_TxFrm_FreeFrmLen = 0;         //数据发送帧队列剩余帧数
@@ -25,8 +25,8 @@
void (*Usart2ParseDataCallback)(uint8_t);
void Usart2InitVariables(void)
{
    m_EUART1_TxFrm_FreeFrmLen = EUART1_TX_FRM_SIZE-1;
{
   m_EUART1_TxFrm_FreeFrmLen = EUART1_TX_FRM_SIZE-1;
}
@@ -42,145 +42,145 @@
void UART1_CheckReceive(void)
{
    int32_t DMACnt2 = 0;
    int32_t MaxDataLen2 = EUART1_RX_BUF_SIZE;
   int32_t DMACnt2 = 0;
   int32_t MaxDataLen2 = EUART1_RX_BUF_SIZE;
   //如果正在往发送队列中添加数据,退出
   if(m_bEUART1PushingFrms)
      return;
   //判断是否正在Check
   if(m_bEUART1CheckingRec)
      return;
   m_bEUART1CheckingRec = 1;
   //if(EUART1_RX_DMA_CH->CNDTR == 0)MK8000修改
   {
      m_bEUART1CheckingRec = 0;
      return;
   }
   //DMACnt2 = EUART1_RX_BUF_SIZE - (EUART1_RX_DMA_CH->CNDTR);
    //如果正在往发送队列中添加数据,退出
    if(m_bEUART1PushingFrms)
        return;
    //判断是否正在Check
    if(m_bEUART1CheckingRec)
        return;
    m_bEUART1CheckingRec = 1;
    //if(EUART1_RX_DMA_CH->CNDTR == 0)MK8000修改
    {
        m_bEUART1CheckingRec = 0;
        return;
    }
    //DMACnt2 = EUART1_RX_BUF_SIZE - (EUART1_RX_DMA_CH->CNDTR);
    while( m_EUART1_DMA_RXPtr != DMACnt2 && MaxDataLen2 > 0)
    {
        Usart2ParseDataCallback(m_EUART1_DMA_RXBuf[m_EUART1_DMA_RXPtr]);//USART2搬运的数据缓存
        m_EUART1_DMA_RXPtr++;
        if( m_EUART1_DMA_RXPtr >= EUART1_RX_BUF_SIZE )
        {
            m_EUART1_DMA_RXPtr = 0;
        }
        //DMACnt2 = EUART1_RX_BUF_SIZE - (EUART1_RX_DMA_CH->CNDTR);MK8000修改
        MaxDataLen2--;
    }
    m_bEUART1CheckingRec = 0;
   while( m_EUART1_DMA_RXPtr != DMACnt2 && MaxDataLen2 > 0)
   {
      Usart2ParseDataCallback(m_EUART1_DMA_RXBuf[m_EUART1_DMA_RXPtr]);//USART2搬运的数据缓存
      m_EUART1_DMA_RXPtr++;
      if( m_EUART1_DMA_RXPtr >= EUART1_RX_BUF_SIZE )
      {
         m_EUART1_DMA_RXPtr = 0;
      }
      //DMACnt2 = EUART1_RX_BUF_SIZE - (EUART1_RX_DMA_CH->CNDTR);MK8000修改
      MaxDataLen2--;
   }
   m_bEUART1CheckingRec = 0;
}
#ifndef EXUART_USE_TXDMA
#ifndef EXUART_USE_TXDMA
//查询方式发送数据
void UART2_CheckSend(void)
{
    static int32_t s_count2 = 0;
   static int32_t s_count2 = 0;
//   uint32_t temp32 = 0;
    if(m_bEUART1PushingFrms || m_bEUART1CheckingSend)//往发送队列中发数据和确认数据发送都为0时
        return;
    m_bEUART1CheckingSend = 1;
   if(m_bEUART1PushingFrms || m_bEUART1CheckingSend)//往发送队列中发数据和确认数据发送都为0时
      return;
   m_bEUART1CheckingSend = 1;
    //判断队列是否为空以及DMA是否空闲
    //if ((EXT_UART2->ISR & UART_FLAG_TXE) == (uint16_t)RESET)   //上次发送未完成MK8000修改
    {
        m_bEUART1CheckingSend = 0;
        return;
    }
    if(m_EUART1_TxFrm_Head == m_EUART1_TxFrm_Tail)               //队列为空
    {
        //if((EXT_UART2->ISR & UART_FLAG_TC) != (uint16_t)RESET)       //发送完毕MK8000修改
        {
            if(m_bEUART1TxEn)
            {
                m_bEUART1TxEn = 0;
                t1++;
   //判断队列是否为空以及DMA是否空闲
   //if ((EXT_UART2->ISR & UART_FLAG_TXE) == (uint16_t)RESET)   //上次发送未完成MK8000修改
   {
      m_bEUART1CheckingSend = 0;
      return;
   }
   if(m_EUART1_TxFrm_Head == m_EUART1_TxFrm_Tail)               //队列为空
   {
      //if((EXT_UART2->ISR & UART_FLAG_TC) != (uint16_t)RESET)       //发送完毕MK8000修改
      {
         if(m_bEUART1TxEn)
         {
            m_bEUART1TxEn = 0;
            t1++;
//            temp32 = GPIOC->CRH;         //C10悬空输入
//            temp32 &= ~(0x00000000F<<8);
//            temp32 &= ~(0x00000000F<<8);
//            temp32 |= (0x000000004<<8);
//            GPIOC->CRH = temp32;// */
            }
        }
        m_bEUART1CheckingSend = 0;
        return;
    }
    if(!m_bEUART1TxEn)
    {
        m_bEUART1TxEn = 1;
#ifdef BAUDRATE_19200
        delay_us(500);
#else
        delay_us(10);
#endif
         }
      }
      m_bEUART1CheckingSend = 0;
      return;
   }
   if(!m_bEUART1TxEn)
   {
      m_bEUART1TxEn = 1;
      #ifdef BAUDRATE_19200
      delay_us(500);
      #else
      delay_us(10);
      #endif
//      temp32 = GPIOC->CRH;         //C10复用推挽输出
//      temp32 &= ~(0x00000000F<<8);
//      temp32 |= (0x000000009<<8);
//      GPIOC->CRH = temp32;// */
    }
    //发送一个字节数据
    //EXT_UART2->TDR = m_EUART1_TxFrames[m_EUART1_TxFrm_Tail].buf[s_count2];MK8000修改
    s_count2++;
    if(s_count2 >= m_EUART1_TxFrames[m_EUART1_TxFrm_Tail].len)      //一帧数据发送完毕
    {
        s_count2 = 0;
        m_EUART1_TxFrm_Tail++;
        if(m_EUART1_TxFrm_Tail == EUART1_TX_FRM_SIZE)
            m_EUART1_TxFrm_Tail = 0;
        m_EUART1_TxFrm_FreeFrmLen++;
    }
    m_bEUART1CheckingSend = 0;
}         // */
   }
   //发送一个字节数据
   //EXT_UART2->TDR = m_EUART1_TxFrames[m_EUART1_TxFrm_Tail].buf[s_count2];MK8000修改
   s_count2++;
   if(s_count2 >= m_EUART1_TxFrames[m_EUART1_TxFrm_Tail].len)      //一帧数据发送完毕
   {
      s_count2 = 0;
      m_EUART1_TxFrm_Tail++;
      if(m_EUART1_TxFrm_Tail == EUART1_TX_FRM_SIZE)
         m_EUART1_TxFrm_Tail = 0;
      m_EUART1_TxFrm_FreeFrmLen++;
   }
   m_bEUART1CheckingSend = 0;
 }         // */
#else
/*
 /*
//检查是否数据帧需要发送
void UART_CheckSend(void)
{
//判断是否正在Check
if(m_bEUARTPushingFrms || m_bEUARTCheckingSend)
   return;
m_bEUARTCheckingSend = 1;
   //判断是否正在Check
   if(m_bEUARTPushingFrms || m_bEUARTCheckingSend)
      return;
   m_bEUARTCheckingSend = 1;
//判断DMA通道是否正在工作
if((EUART_TX_DMA_CH->CCR & 0x01) != 0)   //通道正在工作
{
   if((EUART_DMA->ISR & EUART_TX_DMA_IT_TC) == (uint32_t)RESET)    //传输未完成
   //判断DMA通道是否正在工作
   if((EUART_TX_DMA_CH->CCR & 0x01) != 0)   //通道正在工作
   {
      if((EUART_DMA->ISR & EUART_TX_DMA_IT_TC) == (uint32_t)RESET)    //传输未完成
      {
         m_bEUARTCheckingSend = 0;
         return;
      }
      else
      {
         EUART_DMA->IFCR = EUART_TX_DMA_IT_TC;            //清除标志(注意寄存器和标志名称)
         EUART_TX_DMA_CH->CCR &= ~((uint32_t)0x01);   //禁用DMA
      }
   }
   //判断队列是否为空
   if(m_EUART_TxFrm_Head == m_EUART_TxFrm_Tail)
   {
      m_bEUARTCheckingSend = 0;
      return;
   }
   else
   {
      EUART_DMA->IFCR = EUART_TX_DMA_IT_TC;            //清除标志(注意寄存器和标志名称)
      EUART_TX_DMA_CH->CCR &= ~((uint32_t)0x01);   //禁用DMA
   }
}
//判断队列是否为空
if(m_EUART_TxFrm_Head == m_EUART_TxFrm_Tail)
{
   m_bEUARTCheckingSend = 0;
   return;
}
//开启一次数据发送
EUART_TX_DMA_CH->CMAR = (uint32_t)m_EUART_TxFrames[m_EUART_TxFrm_Tail].buf;   //要发送的内存地址
EUART_TX_DMA_CH->CNDTR = m_EUART_TxFrames[m_EUART_TxFrm_Tail].len;      //要发送的字节数
EUART_TX_DMA_CH->CCR |= 0x01;                                 //开启一次DMA
m_EUART_TxFrm_Tail++;
if(m_EUART_TxFrm_Tail == EUART_TX_FRM_SIZE)
   m_EUART_TxFrm_Tail = 0;
m_EUART_TxFrm_FreeFrmLen++;
m_bEUARTCheckingSend = 0;
}               // */
   //开启一次数据发送
   EUART_TX_DMA_CH->CMAR = (uint32_t)m_EUART_TxFrames[m_EUART_TxFrm_Tail].buf;   //要发送的内存地址
   EUART_TX_DMA_CH->CNDTR = m_EUART_TxFrames[m_EUART_TxFrm_Tail].len;      //要发送的字节数
   EUART_TX_DMA_CH->CCR |= 0x01;                                 //开启一次DMA
   m_EUART_TxFrm_Tail++;
   if(m_EUART_TxFrm_Tail == EUART_TX_FRM_SIZE)
      m_EUART_TxFrm_Tail = 0;
   m_EUART_TxFrm_FreeFrmLen++;
   m_bEUARTCheckingSend = 0;
}               // */
#endif
@@ -188,37 +188,37 @@
void UART2_PushFrame(uint8_t* pdata, int32_t data_len)
{
//   uint8_t temp8 = 0;
    if(m_bEUART1PushingFrms || m_bEUART1CheckingSend)
        return;
    m_bEUART1PushingFrms = 1;
   if(m_bEUART1PushingFrms || m_bEUART1CheckingSend)
      return;
   m_bEUART1PushingFrms = 1;
   if(data_len > EUART1_TX_FRMBUF_SIZE || m_EUART1_TxFrm_FreeFrmLen <= 0)      //帧长度超范围或缓存已满
   {
      m_bEUART1PushingFrms = 0;
      return;
   }
    if(data_len > EUART1_TX_FRMBUF_SIZE || m_EUART1_TxFrm_FreeFrmLen <= 0)      //帧长度超范围或缓存已满
    {
        m_bEUART1PushingFrms = 0;
        return;
    }
    //将要发送的数据帧压入队列
    m_EUART1_TxFrames[m_EUART1_TxFrm_Head].len = data_len;
    memcpy((uint8_t*)m_EUART1_TxFrames[m_EUART1_TxFrm_Head].buf, (uint8_t*)pdata, data_len);
    m_EUART1_TxFrm_Head++;
    if(m_EUART1_TxFrm_Head == EUART1_TX_FRM_SIZE)
        m_EUART1_TxFrm_Head = 0;
    m_EUART1_TxFrm_FreeFrmLen--;
    m_bEUART1PushingFrms = 0;
   //将要发送的数据帧压入队列
   m_EUART1_TxFrames[m_EUART1_TxFrm_Head].len = data_len;
   memcpy((uint8_t*)m_EUART1_TxFrames[m_EUART1_TxFrm_Head].buf, (uint8_t*)pdata, data_len);
   m_EUART1_TxFrm_Head++;
   if(m_EUART1_TxFrm_Head == EUART1_TX_FRM_SIZE)
   m_EUART1_TxFrm_Head = 0;
   m_EUART1_TxFrm_FreeFrmLen--;
   m_bEUART1PushingFrms = 0;
}
//将最新一帧数据Pop出队列
void UART2_PopFrame(void)
{
    if(m_bEUART1PushingFrms || m_bEUART1CheckingSend)
        return;
    if(m_EUART1_TxFrm_FreeFrmLen >= EUART1_TX_FRM_SIZE-1)
        return;
    m_EUART1_TxFrm_Head--;
    if(m_EUART1_TxFrm_Head < 0)
        m_EUART1_TxFrm_Head = EUART1_TX_FRM_SIZE-1;
    m_EUART1_TxFrm_FreeFrmLen++;
   if(m_bEUART1PushingFrms || m_bEUART1CheckingSend)
      return;
   if(m_EUART1_TxFrm_FreeFrmLen >= EUART1_TX_FRM_SIZE-1)
      return;
   m_EUART1_TxFrm_Head--;
   if(m_EUART1_TxFrm_Head < 0)
      m_EUART1_TxFrm_Head = EUART1_TX_FRM_SIZE-1;
   m_EUART1_TxFrm_FreeFrmLen++;
}
//void USART_putc(char c)
//{
@@ -240,7 +240,7 @@
//}
//int fputc(int ch, FILE *f)
//{
//
//
//HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,1);
//   return (ch);
//}
@@ -250,14 +250,14 @@
/***************** UART发送一个字符  **********************/
void Uart1_SendByte(  uint8_t ch )
{
    /* 发送一个字节数据到USART2 */
   /* 发送一个字节数据到USART2 */
    uart_send(UART_ID1, &ch, 1, NULL);
}
/*****************  发送指定长度的字符串 **********************/
void Uart2_SendStr_length( uint8_t *str,uint32_t strlen )
{
    unsigned int k=0;
    do
     unsigned int k=0;
    do
    {
        Uart1_SendByte( *(str + k) );
        k++;
@@ -267,9 +267,9 @@
/*****************  发送字符串 **********************/
void Uart2_SendString(  uint8_t *str)
{
    unsigned int k=0;
   unsigned int k=0;
    do
    do
    {
        Uart1_SendByte(  *(str + k) );
        k++;