野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11462|回复: 7

求助!!串口中断接收问题

[复制链接]
发表于 2016-9-5 16:42:00 | 显示全部楼层 |阅读模式
刚开始使用STM32,用开发板带的例程,发现中断接收时,接收的数据无法放入数组中,求大神指导。具体情况看程序串口配置程序,我没有改动

void Debug_USART_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
               
  RCC_AHB1PeriphClockCmd(DEBUG_USART_RX_GPIO_CLK|DEBUG_USART_TX_GPIO_CLK,ENABLE);

  /* ê1Äü USART ê±Öó */
  RCC_APB2PeriphClockCmd(DEBUG_USART_CLK, ENABLE);

  /* GPIO3õê¼»ˉ */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  /* ÅäÖÃTxòy½ÅÎa¸′óÃ1|Äü  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_PIN  ;  
  GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  /* ÅäÖÃRxòy½ÅÎa¸′óÃ1|Äü */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_PIN;
  GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);

/* ᬽó PXx μ½ USARTx_Tx*/
  GPIO_PinAFConfig(DEBUG_USART_RX_GPIO_PORT,DEBUG_USART_RX_SOURCE,DEBUG_USART_RX_AF);

  /*  á¬½ó PXx μ½ USARTx__Rx*/
  GPIO_PinAFConfig(DEBUG_USART_TX_GPIO_PORT,DEBUG_USART_TX_SOURCE,DEBUG_USART_TX_AF);

  /* ÅäÖÃ′®DEBUG_USART Ä£ê½ */
  /* 2¨ìØÂêéèÖãoDEBUG_USART_BAUDRATE */
  USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
  /* ×Ö3¤(êy¾Yλ+D£Ñéλ)£o8 */
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  /* í£Ö1λ£o1¸öí£Ö1λ */
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  /* D£ÑéλѡÔñ£o2»ê1óÃD£Ñé */
  USART_InitStructure.USART_Parity = USART_Parity_No;
  /* ó2¼tá÷¿ØÖÆ£o2»ê1óÃó2¼tá÷ */
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  /* USARTÄ£꽿ØÖÆ£oí¬ê±ê1Äü½óêÕoí·¢Ëí */
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* íê3éUSART3õê¼»ˉÅäÖÃ */
  USART_Init(DEBUG_USART, &USART_InitStructure);
       
  /* Ƕì×Ïòá¿ÖD¶Ï¿ØÖÆÆ÷NVICÅäÖà */
        NVIC_Configuration();

        /* ê1Äü′®¿ú½óêÕÖD¶Ï */
        USART_ITConfig(DEBUG_USART, USART_IT_RXNE, ENABLE);
       
  /* ê1Äü′®¿ú */
  USART_Cmd(DEBUG_USART, ENABLE);
}



中断接收程序,将我发送的数据存入数组a中,并将a[0]中的数据回传到上位机
void DEBUG_USART_IRQHandler(void)
{
  uint8_t ucTemp;
        if(USART_GetITStatus(DEBUG_USART,USART_IT_RXNE)!=RESET)
        {       
    USART_ClearITPendingBit(DEBUG_USART,USART_IT_RXNE);//Çå3yÖD¶Ï±ê־λ
                ucTemp = USART_ReceiveData( DEBUG_USART );
    //USART_SendData(DEBUG_USART,ucTemp);
    a[i]=        ucTemp;
                USART_SendData(DEBUG_USART,a[0]);
                //Usart_SendByte(DEBUG_USART,a[0]);
    i++;
   if(i==7)       
         {
                //USART_SendData(DEBUG_USART,a[3]);         
                 i=0;
         }
        }         
}       

当我发送10 11 12 13 14 15 16 17这些数据时,收到的是77777711111114444444       11111113333333       0000000       1111111777777711111114444444  这种类似乱码的东西
求大神看下程序,谢谢!
另外,如果是接到一个数据马上发送,程序是对的,一旦将数据保存后再发送就不行。


回复

使用道具 举报

发表于 2016-9-5 18:25:31 | 显示全部楼层
换一个串口调试助手,确认下是不是也收到这样的数据
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-6 10:29:26 | 显示全部楼层
我用自己做的Labview做的上位机测试了,也是不对
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-6 10:30:12 | 显示全部楼层
flyleaf 发表于 2016-9-5 18:25
换一个串口调试助手,确认下是不是也收到这样的数据


我用自己做的Labview做的上位机测试了,也是不对
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-6 10:43:49 | 显示全部楼层
flyleaf 发表于 2016-9-5 18:25
换一个串口调试助手,确认下是不是也收到这样的数据

换了个串口助手,还是不对,大神帮忙看看,或者你又测试好的程序,发给我看看也行,我自己对比一下有什么不对的地方。要求就是把接收到的数据存到一个数组中。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-6 12:51:53 | 显示全部楼层
问题找到了,是我用错了函数,向上位机发数组的话要用Usart_SendByte函数,之前用的是USART_SendData,具体原因我再找找。现在用Usart_SendByte函数已经成功的将我发送的数据再正确的传上来了。最后,谢谢管理员的回复。
回复 支持 反对

使用道具 举报

发表于 2016-9-7 15:00:26 | 显示全部楼层
感觉中断函数里还是定义一个标志位,放在main函数while(1)里去处理,中断函数内最好简单点吧。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 11:21:51 | 显示全部楼层
程序已经改了,是把中断放到main函数的,我之前只是想测试接收数据是否正确,调试好了放到主函数中。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-4 16:11 , Processed in 0.027115 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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