[STM32F2] STM32F205 串口1不能进入中断!

[复制链接]
2706|7
 楼主| dipingzhu 发表于 2015-5-27 14:12 | 显示全部楼层 |阅读模式
void UART_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  USART_InitTypeDef USART_InitStructure;
   
  GPIO_CLK_INIT(USARTx_RX_GPIO_CLK, ENABLE);
  USARTx_CLK_INIT(USARTx_CLK, ENABLE);

  /* Configure USART pin*/
  GPIO_PinAFConfig(USARTx_TX_GPIO_PORT, USARTx_TX_SOURCE, USARTx_TX_AF);
  GPIO_PinAFConfig(USARTx_RX_GPIO_PORT, USARTx_RX_SOURCE, USARTx_RX_AF);
  
  /* Configure USART Tx as alternate function  */
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure);

  /* Configure USART Rx as alternate function  */
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN;
  GPIO_Init(USARTx_RX_GPIO_PORT, &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_Init(USARTx, &USART_InitStructure);
        USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE);
        USART_ITConfig(USARTx, USART_IT_TXE, ENABLE);       
        USART_ClearITPendingBit(USARTx,USART_IT_RXNE);
        USART_ClearITPendingBit(USARTx,USART_IT_TXE);

  USART_Cmd(USARTx, ENABLE);
       
}
void USARTx_IRQHandler(void)
{
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                while (USART_GetFlagStatus(USART1, USART_IT_RXNE) == RESET);
                USART_SendData(USART1,USART_ReceiveData(USART1));
                buffer++;
                *buffer = USART_ReceiveData(USART1);
                uart_flag = 1;
        }
/*        if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
        {
                while (USART_GetFlagStatus(USART1, USART_IT_TXE) == RESET);
                USART_SendData(USART1,0xBB);
                USART_ClearITPendingBit(USART1,USART_IT_TXE);
                USART_ClearFlag(USART1,USART_IT_TXE);
        }*/
        USART_ClearITPendingBit(USART1,USART_IT_RXNE);
        USART_ClearFlag(USART1,USART_IT_RXNE);
        return;
}       
lisonghan2008 发表于 2015-5-27 15:55 | 显示全部楼层
nvic未配置

评分

参与人数 1威望 +1 收起 理由
dipingzhu + 1

查看全部评分

alsowang 发表于 2015-5-27 16:15 来自手机 | 显示全部楼层
没有配置nvic代码
 楼主| dipingzhu 发表于 2015-5-27 17:19 | 显示全部楼层
本帖最后由 dipingzhu 于 2015-5-27 17:21 编辑
alsowang 发表于 2015-5-27 16:15
没有配置nvic代码

为什么需要配置NVIC,我配置后结果一直执行中断,主函数不能执行,配置如下,请高手指点
void NVIC_Configuration()
{
NVIC_InitTypeDef NVIC_InitStructure;

//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   

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

}
wowow 发表于 2015-5-27 17:35 | 显示全部楼层
void USARTx_IRQHandler(void) 改成 void USART1_IRQHandler(void)
mmuuss586 发表于 2015-5-27 18:28 | 显示全部楼层

楼上正解;
 楼主| dipingzhu 发表于 2015-5-27 19:09 | 显示全部楼层
本帖最后由 dipingzhu 于 2015-5-27 19:26 编辑
wowow 发表于 2015-5-27 17:35
void USARTx_IRQHandler(void) 改成 void USART1_IRQHandler(void)

这个没问题,我已经宏定义过了(#define USARTx_IRQHandler     USART1_IRQHandler),只要配置NVIC函数就一直执行中断,要是不配置NVIC函数直接进不了中断,主函数是线初始化串口然后在执行NVIC函数。
main()
{
    UART_Init();//串口初始化
    NVIC_Configuration();
    while(1)
    {
     //主循环内容
    }
}
 楼主| dipingzhu 发表于 2015-5-28 17:45 | 显示全部楼层
问题已经解决是由于启用了发送中断,可能是程序某个地方有调用发送函数,所以一直执行中断函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

45

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部