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

cubemx配置的串口中断发送HAL_UART_Transmit_IT问题

[复制链接]
wu1169668869 提问时间:2015-9-20 22:24 /
用的stm32f103rct6
使能了串口4以及串口4的中断(没有DMA)
在main函数中调用
  MX_UART4_Init();

后可以正常使用串口的中断函数:
接收 HAL_UART_Receive_IT
发送 HAL_UART_Transmit_IT
但是想要前后发送两条语句时,后面的信息不能正常发送…
大概就是这样。

在主程序中调用

                                        HAL_UART_Transmit_IT(&huart4, "helloworld\r\n", strlen("helloworld\r\n"));
                                        HAL_UART_Transmit_IT(&huart4, "helloworld2\r\n", strlen("helloworld2\r\n"));

则串口智能收到第一条字符串

还有如果在主while(1)循环中使用printf后串口接收中断就进不去了,调试时程序也没有跑飞。

以上
收藏 评论2 发布时间:2015-9-20 22:24

举报

2个回答
wu1169668869 回答时间:2015-9-21 00:38:56
好像发现问题了。。。HAL_UART_Transmit_IT会对当前串口发送状态进行判断,如果不是处在空闲或者接收两个状态时,则返回HAL_BUSY忙的状态(上次发送未结束或者串口没有初始化都会返回该信息,因为串口在初始化时将huart->State == HAL_UART_STATE_RESET更改为huart->State= HAL_UART_STATE_READY;)
if((tmp_state == HAL_UART_STATE_READY) || (tmp_state == HAL_UART_STATE_BUSY_RX))
  {
     xxxx;
  }
else
  {
    return HAL_BUSY;
  }

如果一定要发送两个字符串
一种方法是将二者合并为一个字符串
另外可以按照以下:
uart_state_0 = HAL_UART_Transmit_IT(&huart4, "helloworld\r\n", strlen("helloworld\r\n"));
while(HAL_UART_Transmit_IT(&huart4, "helloworld2\r\n", strlen("helloworld2\r\n")));
当然是比较不推荐的方法,这样第二条会一直阻塞直到第一条发送结束。 4.gif
你好我好大家好! 回答时间:2015-9-21 11:19:11

所属标签

相似问题

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