eric92 发表于 2018-11-27 19:23:01

通信E32模块读取工作参数,读取数据错误,麻烦大神支招

while循环
while(1)
       {
    if(ReceiveState==1)
                {
                  ReceiveState=0;
                        i=0;
                while(Rxcounter--)       
                {
                USART_SendData(USART1,RX_buff);
                while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET);//·¢ËͿձê־λ               
                }
                Rxcounter=0;
                }               
   }
}

串口中断
void USART1_IRQHandler(void)
{               
    u8 clear=clear;       
if( USART_GetITStatus(USART1,USART_IT_RXNE) != RESET )
   {
           RX_buff=USART_ReceiveData(USART1);
    }
       else if(USART_GetITStatus(USART1,USART_IT_IDLE)!=RESET)
       {
          clear=USART1->SR;
          clear=USART1->DR;       
          ReceiveState=1;
       }
}



配置
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;       

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//¸´ÓÃÍÆÍìÊä³ö
        GPIO_Init(GPIOA,&GPIO_InitStructure);       
       
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);       
       
}

void USART_Configuration(void)
{
        USART_InitTypeDef USART1_InitStructure;

               
        USART1_InitStructure.USART_BaudRate=9600;
        USART1_InitStructure.USART_WordLength=USART_WordLength_8b;//Ô¤·ÖƵ
        USART1_InitStructure.USART_StopBits=USART_StopBits_1;
        USART1_InitStructure.USART_Parity=USART_Parity_No;
        USART1_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;       
        USART1_InitStructure.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;

        USART_Init(USART1,&USART1_InitStructure);
        //USART_ITConfig(USART1,USART_IT_TXE,ENABLE);//·¢ËÍÖжϲ»ÐèÒª´ò¿ª
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//ʹÄܽÓÊÕÖжÏ
        USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//ʹÄÜ¿ÕÏÐÖжÏ
//        USART_ITConfig(USART1, USART_IT_ORE, ENABLE);
        USART_Cmd(USART1,ENABLE);
        USART_ClearFlag(USART1,USART_FLAG_TC);
               
}

        void NVIC_Configuration(void)
{
           NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}



eric92 发表于 2018-11-27 19:24:01

就是接收不了数据,麻烦大神指点

eric92 发表于 2018-11-28 10:23:28

麻烦指点一下

发表于 2018-11-28 11:02:35

没有开启GPIO,USART的时钟。

eric92 发表于 2018-11-28 11:04:28

安 发表于 2018-11-28 11:02
没有开启GPIO,USART的时钟。

时钟忘记贴出来了,开启了时钟。

eric92 发表于 2018-11-28 11:05:14

void RCC_Configuration(void)
{
    SystemInit();
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
               RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
这个是时钟配置

eric92 发表于 2018-11-28 11:06:59

工作参数是6个字节,我收到了12个字节,且都显示是第一个字节

发表于 2018-11-28 11:35:23

串口中断中读取数据后,也要清除中断标志位。
void USART1_IRQHandler(void)
{               
    u8 clear=clear;      
if( USART_GetITStatus(USART1,USART_IT_RXNE) != RESET )
   {
         RX_buff=USART_ReceiveData(USART1);
         USART_ClearITPendingBit(USART1, USART_IT_RXNE);
    }
         else if(USART_GetITStatus(USART1,USART_IT_IDLE)!=RESET)
         {
          clear=USART1->SR;
          clear=USART1->DR;         
          ReceiveState=1;
         }
}

eric92 发表于 2018-11-28 13:18:21

安 发表于 2018-11-28 11:35
串口中断中读取数据后,也要清除中断标志位。
void USART1_IRQHandler(void)
{               


可以了,谢谢:lol
页: [1]
查看完整版本: 通信E32模块读取工作参数,读取数据错误,麻烦大神支招