OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4806|回复: 8

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

[复制链接]

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-1-19
在线时间
23 小时
发表于 2017-2-6 16:37:25 | 显示全部楼层 |阅读模式
5金钱

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
*********************************************************************************************************/


最佳答案

查看完整内容[请看2#楼]

你的串口中断接收函数: [mw_shl_code=cpp,true] for(Uart2_Rx=0;Uart2_Rx
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-6 16:37:26 | 显示全部楼层
你的串口中断接收函数:
[mw_shl_code=cpp,true] 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;
                 }[/mw_shl_code]

这是个大bug啊。。。在for循环里面接收!!错误的!!在中断里面,进入一次,只接收1个数据。你要接收N个数据,就得进入N次,不要用for!!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-2-6 18:04:57 | 显示全部楼层
得看你的发送数据是什么样的 了
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-1-19
在线时间
23 小时
 楼主| 发表于 2017-2-7 08:34:26 | 显示全部楼层
正点原子 发表于 2017-2-6 18:04
得看你的发送数据是什么样的 了

发送的是一串命令,然后返回的是一串数据
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-1-19
在线时间
23 小时
 楼主| 发表于 2017-2-7 08:36:58 | 显示全部楼层
天涯下的彩虹 发表于 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
回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10915
金钱
10915
注册时间
2014-6-12
在线时间
1041 小时
发表于 2017-2-7 11:36:51 | 显示全部楼层
天涯下的彩虹 发表于 2017-2-7 08:36
没有加关闭
(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 ...

你的串口接收函数要在例程的基础上加以改造,要能接收数组。
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-1-19
在线时间
23 小时
 楼主| 发表于 2017-2-7 11:59:28 | 显示全部楼层
xuyaqi 发表于 2017-2-7 11:36
你的串口接收函数要在例程的基础上加以改造,要能接收数组。

现在是可以在中断里面写接收数据了,但是接收的数据全都为空
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-1-19
在线时间
23 小时
 楼主| 发表于 2017-2-7 12:00:59 | 显示全部楼层


/* 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 NVIC_Configuration();
//static void USART2_IRQHandler2() ;
static void GPIO_Configuration(void);
static void GPIO_LedOn(void);
static void GPIO_LedOn3(void);


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

int socket;
//extern int Uart2_Rx;
int Uart2_Tx;
int Uart2_Len;
int Uart2_Sta=0;
//extern int Uart2_Buffer[140];//êy&#190;Y3¤&#182;è
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);
        OSTimeDlyHMSM(0, 0, 3, 0);       
       
        while(1)
        {               
                USART_SendStr(check,7);
          //OSTimeDlyHMSM(0, 0,5, 0);       
          OSTimeDlyHMSM(0, 0,1, 0);

        }
        NVIC_Configuration();
               


//           printf("%d%d\n",receive[13],receive[12]);
//           printf("%d%d\n",receive[21],receive[20]);
//               
//           TOPLC[0]=receive[13]*256 +receive[12];//CO
//           TOPLC[1]=receive[15]*256 +receive[14];//HC
//           TOPLC[2]=receive[19]*256 +receive[18];//CO2
//           TOPLC[3]=receive[21]*256 +receive[20];//O2
//           TOPLC[4]=receive[23]*256 +receive[22];//NO
//           TOPLC[5]=receive[27]*256 +receive[26];//labuna
       
  }         
         

/*·¢&#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);
                                
                }
}


static void NVIC_Configuration()
{
   NVIC_InitTypeDef NVIC_InitStructure;
                                         /*NVIC Configuration*/
        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

}

/*USART&#197;&#228;&#214;&#195;&#199;é&#191;&#246;*/
static void USART_START(INT32U baud_rate)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_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);
       


  /*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_ITConfig(USART1, USART_IT_TXE, ENABLE);
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  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);
}




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

以上是发送命令的代码。





void USART2_IRQHandler(void)
{
        int myname;
        #if ( OS_VIEW_MODULE == DEF_ENABLED )
                OSView_RxTxISRHandler();
        #endif       
        myname=10;
        if(USART_GetFlagStatus(USART2,USART_IT_RXNE)!=RESET) //&#189;óê&#213;&#214;D&#182;&#207;óDD§
        {           
                  myname=12;
                        Uart2_Buffer[Uart2_Rx++] = USART_ReceiveData(USART2);//·μ&#187;&#216;USART2&#189;óê&#213;μ&#196;×&#238;&#189;üêy&#190;Y
                        //USART_ClearITPendingBit(USART2,USART_IT_RXNE);//&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;
                  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
                         //Uart2_Rx = (Uart2_Rx + 1) % 140;
        }
}
接收不了数据了目前。


回复

使用道具 举报

2

主题

686

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
10915
金钱
10915
注册时间
2014-6-12
在线时间
1041 小时
发表于 2017-2-7 13:40:32 | 显示全部楼层
天涯下的彩虹 发表于 2017-2-7 11:59
现在是可以在中断里面写接收数据了,但是接收的数据全都为空

如果你用串口调试能正确接收,而单片机不能正常接收显然是程序问题,串口中断接收数组网上例程很多可以拿来参考。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 00:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表