打印
[STM32F4]

我的程序不会进入串口中断

[复制链接]
1066|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
smallbra|  楼主 | 2015-7-1 13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是我的程序设置,用查询方式工作,串口发送和接受都试过,可以正常工作,但是如果用中断方式,不会跳入中断,请教一下是哪里出问题了。
void USART_Gpio_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource0, GPIO_AF_UART8);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource1, GPIO_AF_UART8);
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
        GPIO_Init(GPIOE, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}
void USART_Config(void)
{
        USART_InitTypeDef Usart_InitStructure;
        USART_Gpio_Config();
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART8, ENABLE );
        Usart_InitStructure.USART_BaudRate = 9600;
        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( UART8 , &Usart_InitStructure);
  USART_Cmd(UART8,ENABLE);
}

void USARVT_NVIC_Config(void)
{
        NVIC_InitTypeDef  NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel  = UART8_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
        USART_ITConfig(UART8, USART_IT_RXNE, ENABLE);
        USART_ITConfig(UART8, USART_IT_TXE, ENABLE);
}

void UART8_IRQHandler(void)
{
        char receive;
        char a=0x05;
        a=a+1;
        if(USART_GetITStatus(UART8, USART_IT_RXNE) != RESET)
        {   
          receive = USART_ReceiveData( UART8 ) ;
          USART_SendData(UART8,a);
        }
        if(USART_GetITStatus(UART8, USART_IT_TXE) != RESET)
        {
                USART_SendData(UART8,a);
        }
}
沙发
Leeone| | 2015-7-1 16:10 | 只看该作者
中断向量搞对了没有

使用特权

评论回复
板凳
Mrjiang88178| | 2015-7-1 19:56 | 只看该作者
向量表都没有?分组呢?

使用特权

评论回复
地板
mmuuss586| | 2015-7-1 20:18 | 只看该作者
看了下,没啥问题;

换下初始化顺序看看;
USART_ITConfig(UART8, USART_IT_RXNE, ENABLE);
这句移到前面看看;

使用特权

评论回复
5
smallbra|  楼主 | 2015-7-2 08:45 | 只看该作者
mmuuss586 发表于 2015-7-1 20:18
看了下,没啥问题;

换下初始化顺序看看;

还是不行

使用特权

评论回复
6
smallbra|  楼主 | 2015-7-2 08:45 | 只看该作者
Mrjiang88178 发表于 2015-7-1 19:56
向量表都没有?分组呢?

我这个是看着例子程序写的,中断向量表是哪个函数设置的?

使用特权

评论回复
7
smallbra|  楼主 | 2015-7-2 09:15 | 只看该作者
结贴,问题在我的主函数,我是先调用USART_Config(void),再调用 USARVT_NVIC_Config(void),我把两个函数换了顺序就好了,感谢大家的指导

使用特权

评论回复
8
香水城| | 2015-7-2 16:09 | 只看该作者
问题解决了就好!
结贴请点击本贴左上方的结贴按钮哦!

使用特权

评论回复
9
mmuuss586| | 2015-7-2 17:26 | 只看该作者
smallbra 发表于 2015-7-2 09:15
结贴,问题在我的主函数,我是先调用USART_Config(void),再调用 USARVT_NVIC_Config(void),我把两个函数 ...

:loveliness:
那还是初始化顺序问题啊;

使用特权

评论回复
10
596142041| | 2015-7-2 18:47 | 只看该作者
初始化通信接口时使用中断必须在使能模块前使能中断。不然就不好使。

使用特权

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

本版积分规则

13

主题

27

帖子

0

粉丝