打印

求助,STM32串口接收进入不了中断

[复制链接]
5656|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kyzb001|  楼主 | 2012-3-21 13:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif

/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

/*UART2*/
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/*timer2*/
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}
void USART_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
USART_ClockInitTypeDef USART_ClockInitStructure;

//使能串口1,PA,AFIO总线
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO ,ENABLE );
RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 ,ENABLE);

/* A9 USART1_Tx */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出-TX
GPIO_Init(GPIOA, &GPIO_InitStructure);

/* A10 USART1_Rx */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入-RX
GPIO_Init(GPIOA, &GPIO_InitStructure);


USART_InitStructure.USART_BaudRate = 115200;
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_ClockInitStructure.USART_Clock = USART_Clock_Disable;
// USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
// USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
// USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
//
// USART_ClockInit(USART2, &USART_ClockInitStructure);
USART_Init(USART2, &USART_InitStructure);
/* Enable the USARTx */
USART_Cmd(USART2, ENABLE);
//串口1使用接收中断
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);

}



void USART2_IRQHandler(void)
{
u16 i;

if(USART_GetFlagStatus(USART2,USART_IT_RXNE)==SET)
{
i = USART_ReceiveData(USART2);
USART_SendData(USART2,i);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
{
}
}

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

USART_ClearITPendingBit(USART2, USART_IT_RXNE);

}

//溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
{
USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR
USART_ReceiveData(USART2); //读DR
}
}
沙发
kyzb001|  楼主 | 2012-3-21 13:10 | 只看该作者
发送数据正常, 我从串口发回东西,不能返回打印。

请教大家, 这是咋回事啊!!!

使用特权

评论回复
板凳
kyzb001|  楼主 | 2012-3-21 13:22 | 只看该作者
有木有人呐!!!!

使用特权

评论回复
地板
香水城| | 2012-3-21 13:36 | 只看该作者
有人,但是没有时间看代码。

使用特权

评论回复
5
logokfu| | 2012-3-21 15:45 | 只看该作者
来了

使用特权

评论回复
6
YHW2003| | 2012-3-21 16:11 | 只看该作者
你使用了串口2接受中断

使用特权

评论回复
7
sdrztw001| | 2012-3-21 17:02 | 只看该作者
你这中断函数也太乱了
固件代码如下
void USARTy_IRQHandler(void)
{
  if(USART_GetITStatus(USARTy, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RxBuffer1[RxCounter1++] = USART_ReceiveData(USARTy);

    if(RxCounter1 == NbrOfDataToRead1)
    {
      /* Disable the USARTy Receive interrupt */
      USART_ITConfig(USARTy, USART_IT_RXNE, DISABLE);
    }
  }
  
  if(USART_GetITStatus(USARTy, USART_IT_TXE) != RESET)
  {   
    /* Write one byte to the transmit data register */
    USART_SendData(USARTy, TxBuffer1[TxCounter1++]);

    if(TxCounter1 == NbrOfDataToTransfer1)
    {
      /* Disable the USARTy Transmit interrupt */
      USART_ITConfig(USARTy, USART_IT_TXE, DISABLE);
    }   
  }
}

使用特权

评论回复
8
kyzb001|  楼主 | 2012-3-22 10:35 | 只看该作者
你好, 这个不行吗? 6# YHW2003

使用特权

评论回复
9
kyzb001|  楼主 | 2012-3-22 10:36 | 只看该作者
这个不是那个开发板上的??? 7# sdrztw001

使用特权

评论回复
10
kyzb001|  楼主 | 2012-3-22 10:37 | 只看该作者
void USART2_IRQHandler(void)
{
        USART2_Str("In USART2 Init");
       
        //接收中断
        if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
        {                  
                LED_ALL_OFF;
                USART_ClearITPendingBit(USART2,USART_IT_RXNE);
                Uart1_Get_Data=USART_ReceiveData(USART2);
                Uart1_Get_Flag=1;
                USART2_Byte(Uart1_Get_Data);
        }
       
        //溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
        if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
        {
                USART_ClearFlag(USART2,USART_FLAG_ORE);        //读SR
                USART_ReceiveData(USART2);                                //读DR
        }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Is this my life

15

主题

624

帖子

1

粉丝