为什么使用USART接收的数据都是同一个

2019-07-20 17:02发布

USART2接收的数据 USART2接收的数据 代码 代码
如上图所示,USART2接收的数据,全部代码如下:
/****************************************Copyright (c)****************************************************
**                                      
**                           
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               uctsk_Blink.c
** Descriptions:            The uctsk_Blink application function
**
**--------------------------------------------------------------------------------------------------------
** Created by:              AVRman
** Created date:            2016-2-6
** Version:                 v1.0
** Descriptions:            The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:            
** Modified date:           
** Version:                 
** Descriptions:            
**
*********************************************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include <includes.h>            
#include "ip.h"
#include "lwip/api.h"
#include "lwip/tcpip.h"
#include "lwip/memp.h"
#include "lwip/stats.h"
#include "netif/loopif.h"
#include "search.h"
#include "sockets.h"
#include "lwIP.h"
#include "netif.h"

/* Private variables ---------------------------------------------------------*/
static  OS_STK         App_TaskExhaustkStk[APP_TASK_EXHAUST_STK_SIZE];
static  OS_STK         App_TaskLWIPReceiveStk[APP_TASK_LWIPRECEIVE_STK_SIZE];
static void USART_START(INT32U baud_rate);
static void USART_SendStr(int *pucStr,int ulNum);//·¢&#203;í&#214;&#184;á&#238;oˉêy
static void USART_ReceiveStr(int *recv,int len);
static void USART_RecvData();
static void USART2_IRQHandler2() ;
static void GPIO_Configuration(void);
static void GPIO_LedOn(void);
static void GPIO_LedOn3(void);
static void NVIC_Configure(void);

/* Private function prototypes -----------------------------------------------*/
static void   uctsk_ExhaustAna         ();
static void   uctsk_LWIPReceive      (void);

int socket;
int Uart2_Rx;
int Uart2_Tx;
int Uart2_Len;
int Uart2_Sta=0;
int Uart2_Buffer[140];//êy&#190;Y3¤&#182;è
int Uart2_Buffer1[140];
int Status;//×′ì&#172;
int Res;
int TOPLC[10];

//static void usartReceive(int*Uart2_Rx,int Uart2_Len);


void  App_ExhaustAnaTaskCreate (void)
{
   CPU_INT08U  os_err;

        os_err = os_err; /* prevent warning... */

        os_err = OSTaskCreate((void (*)(void *)) uctsk_ExhaustAna,                               
                          (void          * ) 0,                                                       
                          (OS_STK        * )&App_TaskExhaustkStk[APP_TASK_LWIPRECEIVE_STK_SIZE - 1],               
                          (INT8U           ) APP_TASK_EXHAUST_PRIO  );                                                       

        #if OS_TASK_NAME_EN > 0
            OSTaskNameSet(APP_TASK_EXHAUST_PRIO, " Task Exhaust Analyze", &os_err);
        #endif

}





void  App_LWIPReceiveTaskCreate (void)
{
   CPU_INT08U  os_err;

        os_err = os_err; /* prevent warning... */

        os_err = OSTaskCreate((void (*)(void *)) uctsk_LWIPReceive,                               
                          (void          * ) 0,                                                       
                          (OS_STK        * )&App_TaskLWIPReceiveStk[APP_TASK_EXHAUST_STK_SIZE - 1],               
                          (INT8U           ) APP_TASK_LWIPRECEIVE_PRIO  );                                                       

        #if OS_TASK_NAME_EN > 0
            OSTaskNameSet(APP_TASK_LWIPRECEIVE_PRIO, " Task LWIPReceive ", &os_err);
        #endif

}


static void   uctsk_LWIPReceive      (void)
{
       

        int err;
//   int newsocetTemp;
   struct ip_addr ipaddr;
   char recvbuff[100];
   u32_t len;
   struct sockaddr_in sin;
   struct sockaddr_in adressClient;
   struct sockaddr    sockaddr_name;
   uint8_t dataH=0,dataL=0;
   uint16_t        enginespeed=0,pedal=0;
   uint16_t count=0;

   Ethernet_Initialize();

   Init_lwIP();

   lwip_socket_init();
  // SpeedTansducer_Init();


   IP4_ADDR(&ipaddr, 192, 168, 0, 1 );
   socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   sin.sin_len = sizeof(sin);
   sin.sin_family = AF_INET;
   sin.sin_port = htons(2600);
   sin.sin_addr.s_addr = ipaddr.addr;
   sockaddr_name=  *((const struct sockaddr*)&sin);
//  bind(socket,(const struct sockaddr*)&sin,sizeof( struct sockaddr));

   len=sizeof(struct sockaddr);
  // listen(socket,5);
   err=connect(socket,(const struct sockaddr*)&sin,sizeof( struct sockaddr));

  // if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
       



}






static void uctsk_ExhaustAna ()
{
       

        int increase=0;
        int  receive[120];
       
        int measure[6]={0xAA,0x03,0x43,0x16,0x01,0xA3};
        int stop[6]={0xAA,0x03,0x43,0x16,0x00,0xA4};
        int check[7]={0xAA, 0x04 ,0x43 ,0x11, 0xFF, 0x01 ,0xA8};
        USART_START(9600);
        USART_SendStr(measure,6);
         USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
         //USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
       

       
        OSTimeDlyHMSM(0, 0, 3, 0);       
       
                        while(1)
                        {               
                                USART_SendStr(check,7);
                                OSTimeDlyHMSM(0, 0,5, 0);       
             USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
             //USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
                               
                                USART2_IRQHandler2();       
                                OSTimeDlyHMSM(0, 0,1, 0);

                        }



  }         
         

/*·¢&#203;í&#214;&#184;á&#238;*/
static void USART_SendStr(int *pucStr,int ulNum)       //·¢&#203;íò&#187;′&#174;&#214;&#184;á&#238;
{
        int i;
       
        for(i=0;i<ulNum;i++)
                {
                        //while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET);
                        while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
                        USART_SendData(USART2,*pucStr++);       
                  
     OSTimeDlyHMSM(0, 0,0, 10);

                                          
                }
}



/*USART&#197;&#228;&#214;&#195;&#199;é&#191;&#246;*/
static void USART_START(INT32U baud_rate)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

  /*RCC  Configuration*/
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO ,ENABLE);

  RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 ,ENABLE);

         /*GPIO Configuration*/
  GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);

  /*
  *  USART2_TX -> PD5 , USART2_RX -> PD6
  */                               
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
       
         /*NVIC Configuration*/
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);   

  /*USART Configuration*/
  USART_InitStructure.USART_BaudRate = baud_rate;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  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(USART2, &USART_InitStructure);
  USART_ClearFlag(USART2,USART_FLAG_TC);
  USART_Cmd(USART2, ENABLE);

}

static void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD , ENABLE);                                                  
/**
*  LED1 -> PD2 , LED2 -> PD3 , LED3 -> PD4 , LED4 -> PD7
*/                                         
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}



/************************************************************************/
/******************************&#214;D&#182;&#207;&#189;óê&#213;êy&#190;Y*************************/



void USART2_IRQHandler2(void)          
{

        if(USART_GetFlagStatus(USART2,USART_IT_RXNE)==SET) //&#189;óê&#213;&#214;D&#182;&#207;óDD§
        {           
                  USART_ClearITPendingBit(USART2,USART_IT_RXNE);//&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;
           for(Uart2_Rx=0;Uart2_Rx<140;Uart2_Rx++)
                 {       
                        Uart2_Buffer[Uart2_Rx] = USART_ReceiveData(USART2);//·μ&#187;&#216;USART2&#189;óê&#213;μ&#196;×&#238;&#189;üêy&#190;Y
                         USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
                         //Uart2_Rx = (Uart2_Rx + 1) % 140;
                 }
        }
       
       
}






/*********************************************************************************************************
      END FILE
*********************************************************************************************************/


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
天涯下的彩虹
2019-07-21 04:14
天涯下的彩虹 发表于 2017-2-7 08:34
发送的是一串命令,然后返回的是一串数据

没有加关闭
(1)AA 01 06 F9 AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 01 06 F9
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3

加关闭

(2)AA 01 06 F9 AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 01 15 EA AA 01 06 F9
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 2F 08 00 00 00 00 00 00 C9 00 00 00 B3

第三次测试数据
(3)AA 01 06 F9 AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 01 06 F9
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 1F 08 00 00 00 00 00 00 C9 00 00 00 C3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 1F 08 00 00 00 00 00 00 C9 00 00 00 C3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 1F 08 00 00 00 00 00 00 C9 00 00 00 C3
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 1F 08 00 00 00 00 00 00 C9 00 00 00 C3

第四次测试数据

(4)AA 01 06 F9 AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 04 43 16 01 16 8C AA 01 06 F9
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 06 08 00 00 00 00 00 00 C9 00 00 00 DC
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 06 08 00 00 00 00 00 00 C9 00 00 00 DC
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 06 08 00 00 00 00 00 00 C9 00 00 00 DC
AA 1A 43 11 FF 01 DF 00 00 00 00 00 00 00 00 00 06 08 00 00 00 00 00 00 C9 00 00 00 DC


以上是我应该接受到的数据,这是在串口调试下做的,但是在程序中用USART2只能接收到一个数据AA

一周热门 更多>