stm32F103zet6的UART4串口无法进入中断问题,以下是代码

2019-07-21 01:56发布

请问下是我配置问题吗?初始化可以,就是进不去中断,发数据接收不到,我用的是max13487芯片进行485通讯。

void UART4_485_Init(u32 baud)
{
    GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);        //使能GPIOC时钟
        RCC_APB2PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);         //使能串口1(485)时钟

         
//    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;          // 485控制输入输出
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽输出
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//        GPIO_Init(GPIOF, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  //PA9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA10
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
        GPIO_Init(GPIOC, &GPIO_InitStructure);
       
//        GPIO_ResetBits(GPIOF, GPIO_Pin_11);        //默认为接受模式
//       
//        NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel; //使能串口 2 中断
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; //先占优先级 2 级
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //从优先级 2 级
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
//        NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化 NVIC 寄存器


        NVIC_InitStructure.NVIC_IRQChannel = UART4_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);       


   // 使能UART5中断
    USART_InitStructure.USART_BaudRate = baud;                  //设定传输速率
        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(UART4, &USART_InitStructure);      //初始化串口4
       
        USART_ITConfig(UART4, USART_IT_IDLE,ENABLE);  //使能串口4接收中断       
        USART_Cmd(UART4, ENABLE);                     //使能串口4       
        USART_ClearFlag(UART4, USART_FLAG_TC);
        USART_Init(USART1, &USART_InitStructure);

}

void UART4_Send_Data(u8 *buf,u8 len)
{
          for(u8 i=0;i < len; i++)                //循环发送数据
        {                  
                while(USART_GetFlagStatus(UART4, USART_FLAG_TXE) == RESET);          
                USART_SendData(UART4,buf[i]);
        }         
}


void UART4_IRQHandler(void)
{
  while(USART_GetITStatus(UART4, USART_IT_RXNE) != RESET)
          {
            //数据存入环型缓冲区
                UART4_RX_buf[UART4_Rec_len++] = USART_ReceiveData(UART4);
    }

       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。