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

帮忙看下串口空闲中断问题

[复制链接]
jacklee-418482 提问时间:2020-3-4 17:28 /
用的是STM32CUBEMX  5.3.0版做的工程,在实验STM32F103VCT6的串口空闲中断 一直不成功,附件1,是下载别人的工程不是用CUBE做的,没有问题,空闲中断可以正常进入,我又实验我的老的一些工程,也可以正常进入的。 附件2 是用CUBEMX 做的工程,串口的一字节一中断 是正常的,打开IDEL 不正常。
不想用DMA +IDEL,哪位有空又兴趣帮看下,或是非用CUBE 做的非DMA的 IDEL 中断工程给一个研究下,谢了。


主程序里打开了
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);

__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
在串口中断函数里放了2个计数器,没打印,用跟踪的方式在观察那2个计数器了,比如一次发了5个字节,就可以看到一个计数器增了5(5字节),令一个计数器增了1(一帧)。

而用CUBE 做的工程,
if(__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE)!= RESET)
{
  ReceiveDATA=(uint8_t)(USART1->DR & 0x1FF);
   buf[tk++]=ReceiveDATA;
  tk2++;
}
if(__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_IDLE)!= RESET)
{
  USART1->SR;
  USART1->DR;
   tk=0;
   tk1++;
  // __HAL_UART_CLEAR_IDLEFLAG(&huart1);
  // __HAL_UART_CLEAR_FLAG(&huart1, UART_FLAG_IDLE);
}
如果是采用if()  if() 并列的,2个计数器就会同步增长。而采用if()  else if()  , 只有if()进去了。

1.rar

下载

1.69 MB, 下载次数: 1, 下载积分: ST金币 -1

2.part01.rar

下载

8 MB, 下载次数: 1, 下载积分: ST金币 -1

2.part02.rar

下载

4.07 MB, 下载次数: 1, 下载积分: ST金币 -1

收藏 评论6 发布时间:2020-3-4 17:28

举报

6个回答
jacklee-418482 回答时间:2020-3-4 17:38:46
目前感觉还是CUBE 的问题
也跟踪寄存器了,水平有限,我看到的都是没问题的。

yklstudent 回答时间:2020-3-5 08:40:50
还是不喜欢HAL库
jacklee-418482 回答时间:2020-3-5 09:01:52
好不容易上船了,不能轻易下来啊,哈哈
废鱼 回答时间:2020-3-5 18:21:35
空闲中断是否开启了?串口应该是没有什么问题。
jacklee-418482 回答时间:2020-3-10 21:37:48
开了
jacklee-418482 回答时间:2020-3-10 21:48:54
已经搞定了

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版