打印
[STM32F1]

USART3进入不到接收中断

[复制链接]
1702|43
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxmmi|  楼主 | 2020-10-11 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
高手,求教一下。芯片stm32f103使用串口3进行收发数据,发送数据没有问题,但是始终接收不到数据,单步调试发现是没有进入串口的中断函数。

使用特权

评论回复
沙发
songqian17| | 2020-10-11 17:25 | 只看该作者

直接贴配置代码就行了,贴上来看看

使用特权

评论回复
板凳
chenho| | 2020-10-11 17:28 | 只看该作者
都能发送,说明串口配置没问题;

使用特权

评论回复
地板
zwll| | 2020-10-11 17:33 | 只看该作者
中断部分配置不正常吧;

使用特权

评论回复
5
xxmmi|  楼主 | 2020-10-11 17:36 | 只看该作者

void USART3_Init(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   USART_InitTypeDef USART_InitStructure;
   NVIC_InitTypeDef NVIC_InitStructure;
        
        /* config USART3 clock */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
        
        /* USART3 GPIO config */
        /* Configure USART3 Tx (PB.10) as alternate function push-pull */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, &GPIO_InitStructure);   
        /* Configure USART3 Rx (PB.11) as input floating */
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOB, &GPIO_InitStructure);
         
        /* USART3 mode config */
   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(USART3, &USART_InitStructure);
   USART_Cmd(USART3, ENABLE);
   
        
   USART_ClearFlag(USART3, USART_FLAG_TC);
               
   USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);

   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
   NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;               
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        
   NVIC_Init(&NVIC_InitStructure);        
   
}

使用特权

评论回复
6
xxmmi|  楼主 | 2020-10-11 17:39 | 只看该作者
都配了啊,很纳闷

使用特权

评论回复
7
wyjie| | 2020-10-11 17:46 | 只看该作者
  USART_Cmd(USART3, ENABLE); 把这句话放在 NVIC_Init(&NVIC_InitStructure);    这句话后面就行了

使用特权

评论回复
8
zwll| | 2020-10-11 17:49 | 只看该作者

/* Enable GPIO clock */
  RCC_APB2PeriphClockCmd(USARTx_TX_GPIO_CLK | USARTx_RX_GPIO_CLK, ENABLE);  
  /* Enable USART clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);        
                                                                                                                                                                                                        //开启USART1的Clk,
  
  /* Configure USART Tx and Rx as alternate function push-pull */
  GPIO_InitStruct.GPIO_Pin = USARTx_TX_PIN;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStruct);
  
  GPIO_InitStruct.GPIO_Pin = USARTx_RX_PIN;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStruct);
               
        Uart2BaudInitial(38400);                                                                                                        //ZIGBEE模块默认波特率

        /* NVIC configuration */
  /* Enable the USARTx Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
        
        USART_ITConfig(UART4, USART_IT_RXNE, ENABLE);
        USART_Cmd(UART4,ENABLE);

这是我的串口4程序,F1的,芯片型号不一样,你用UART3一样的;

使用特权

评论回复
9
chuxh| | 2020-10-11 17:52 | 只看该作者
还有看下,接收引脚,有没有虚焊等

使用特权

评论回复
10
xxmmi|  楼主 | 2020-10-11 17:55 | 只看该作者
还是不行,单步调试时,PC端输入数据以后,就不知道跑到哪儿了。提示这个Fri Sep 22, 2017 08:56:45: Stopped by a vector catch ...

使用特权

评论回复
11
xxmmi|  楼主 | 2020-10-11 18:06 | 只看该作者
引脚检查了,没有问题

使用特权

评论回复
12
juventus9554| | 2020-10-11 18:09 | 只看该作者

代码应该没有什么问题,贴上你的中断函数

使用特权

评论回复
13
dingy| | 2020-10-11 18:12 | 只看该作者
没有启动文件???????

使用特权

评论回复
14
xxmmi|  楼主 | 2020-10-11 18:16 | 只看该作者

UART_PutStr("SHURU\r\n");
  
  if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RXBuffer[RXCounter++] = (USART_ReceiveData(USART3) & 0x7F);         

    /* Clear the USART1 Receive interrupt */
    USART_ClearITPendingBit(USART3, USART_IT_RXNE);

    if(RXCounter == 100)
    {
      /* Disable the USART Receive interrupt */
      USART_ITConfig(USART3, USART_IT_RXNE, DISABLE);
    }
}

使用特权

评论回复
15
xxmmi|  楼主 | 2020-10-11 18:20 | 只看该作者
添加了cortexm3_macro.s    还是不行

使用特权

评论回复
16
pengf| | 2020-10-11 18:23 | 只看该作者
貌似有点道理

使用特权

评论回复
17
xxmmi|  楼主 | 2020-10-11 18:26 | 只看该作者

Fri Sep 22, 2017 09:43:08: Stopped by a vector catch ...
PC端一发数据,软件就提示这个,不知道跑到哪个位置了

使用特权

评论回复
18
renyaq| | 2020-10-11 18:34 | 只看该作者
应该中断接收没什么问题了,IAR的中断向量表好像不是你说的哪个文件,没用过IAR,刚才百度了下,你在网上下个STM32IAR的工程,把中断向量表文件拿过来用用

使用特权

评论回复
19
supernan| | 2020-10-11 18:40 | 只看该作者

楼主tx和rx连接对了吗?

使用特权

评论回复
20
happy_10| | 2020-10-11 18:43 | 只看该作者
串口要共地。

使用特权

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

本版积分规则

369

主题

4278

帖子

2

粉丝