打印
[STM32F2]

STM32F205 串口1不能进入中断!

[复制链接]
2401|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代码

使用特权

评论回复
来自iPhone 5
地板
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);

}

使用特权

评论回复
5
wowow| | 2015-5-27 17:35 | 只看该作者
void USARTx_IRQHandler(void) 改成 void USART1_IRQHandler(void)

使用特权

评论回复
6
mmuuss586| | 2015-5-27 18:28 | 只看该作者

楼上正解;

使用特权

评论回复
7
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)
    {
     //主循环内容
    }
}

使用特权

评论回复
8
dipingzhu|  楼主 | 2015-5-28 17:45 | 只看该作者
问题已经解决是由于启用了发送中断,可能是程序某个地方有调用发送函数,所以一直执行中断函数。

使用特权

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

本版积分规则

6

主题

45

帖子

1

粉丝