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

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

[复制链接]
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-1794 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版