OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5420|回复: 5

请问原子哥,串口通信实验中,改RXBUFFERSIZE=2,为什么不能解发中断了?

[复制链接]

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-10-8
在线时间
18 小时
发表于 2021-6-30 16:39:12 | 显示全部楼层 |阅读模式
1金钱
如题目所示,改RXBUFFERSIZE=2后,串口助手有发送无接收,说明没有中断了?
另外,UART_Receive_IT()函数中, if(--huart->RxXferCount == 0)
{/* Disable the UART Parity Error Interrupt and RXNE interrupt*/
      CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE));

      /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
      CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);

      /* Rx process is completed, restore huart->RxState to Ready */
      huart->RxState = HAL_UART_STATE_READY;

      HAL_UART_RxCpltCallback(huart);
}
可是我看了许久,只有当RXBUFFERSIZE=1时,这个条件起作用,可以进入HAL_UART_RxCpltCallback(huart);如果我设RXBUFFERSIZE=2,因为--huart->RxXferCount == 1,所以永远进不了HAL_UART_RxCpltCallback(huart);

是这样不?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12995
金钱
12995
注册时间
2012-11-26
在线时间
3790 小时
发表于 2021-6-30 16:50:18 | 显示全部楼层
你发了几个字节数据?
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-10-8
在线时间
18 小时
 楼主| 发表于 2021-6-30 17:53:47 | 显示全部楼层
我发了12两个字
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3606
金钱
3606
注册时间
2019-8-14
在线时间
1052 小时
发表于 2021-6-30 18:51:39 | 显示全部楼层
接收中断里面有没有对2个字节数据都进行了处理
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-10-8
在线时间
18 小时
 楼主| 发表于 2021-6-30 19:41:13 | 显示全部楼层
我用得是1.16.0的固件包,中断服务函数没有调用UART_Receive(),而是如下代码: /* If no error occurs */
  errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
  if (errorflags == 0U)
  {
    /* UART in mode Receiver ---------------------------------------------------*/
    if (((isrflags & USART_ISR_RXNE) != 0U)
        && ((cr1its & USART_CR1_RXNEIE) != 0U))
    {
      if (huart->RxISR != NULL)
      {
        huart->RxISR(huart);
      }
      return;
    }
其它的都和光盘上的资料一致
回复

使用道具 举报

10

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
129
金钱
129
注册时间
2015-10-8
在线时间
18 小时
 楼主| 发表于 2021-6-30 19:49:12 | 显示全部楼层
如果#define  RxBufferSize 2,也就意味着,第一个字节1接收到后,没有进入中断,而需要先把1这个字节从RDR读到RxBuffer,然后再接收2这个字节到RDR后,才会触发RXNE中断产生,才会进入中断服务程序,可是我看了程序流程的函数,没有在中断前接收第2个字节的函数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表