你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32F411RET的串口中断

[复制链接]
yaowei 提问时间:2015-10-30 14:02 /
之前对于串口中断的理解是只要使能了串口中断,比如接收中断,那么只要已接收到数据,就会进入中断服务函数,但是这次用了HAL库的中断。
它的使能函数是HAL_UART_Receive_IT(&huart2, &data, 10);  如果一有数据过来,那么就会进入相应的回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

本来高高兴兴的打算做一个从串口助手发数据,单片机只要一接收到,就把这个刚接收到的数据发给电脑串口助手。
但是问题来了,程序跑起来之后,从串口助手发第一次,单片机接收到了,然后往串口助手那边发出数据,可是第二次就不行,就相当于这个中断只用了一次就用不了


望大神帮忙看看  代码如下几句:

  HAL_UART_Receive_IT(&huart2, &data, 10); //使能接收中断
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
                                                                 
  }
  /* USER CODE END 3 */

}


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//接收中断的回调函数
{
        HAL_UART_Transmit(&huart2, &data2, 1,10);
}

QQ图片20151030135847.png
收藏 评论4 发布时间:2015-10-30 14:02

举报

4个回答
风子 回答时间:2015-10-30 14:57:52
本帖最后由 风子 于 2015-10-30 15:01 编辑

因为中断接收要接受完10个数据才会调用回调函数,并且调用之前会关掉中断,所以下次再发来就没用了,所以你需要在回调函数里再次调用HAL_UART_Receive_IT。
坐这个实验还是推荐用标准库的方法




yaowei 回答时间:2015-10-30 15:54:55
风子 发表于 2015-10-30 14:57
因为中断接收要接受完10个数据才会调用回调函数,并且调用之前会关掉中断,所以下次再发来就没用了,所以你 ...

我可不可以这么理解,如果我只从串口助手发送一个数据,那它岂不是不会进入回调函数  我已经试过了 好像是这样的
风子 回答时间:2015-10-30 16:04:22
是的,如果你要一个数据就进回调,应该写 HAL_UART_Receive_IT(&huart2, &data, 1);
yaowei 回答时间:2015-10-30 17:18:54
风子 发表于 2015-10-30 16:04
是的,如果你要一个数据就进回调,应该写 HAL_UART_Receive_IT(&huart2, &data, 1);

这个我刚试了是可以的,但是我这么写HAL_UART_Receive_IT(&huart2, &data3,5); 接收五次才回调,我用串口助手发送了五次为什么没有进入回调
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版