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

cubemx配置的串口中断发送HAL_UART_Transmit_IT问题(搞定见#21)

[复制链接]
ss1969 提问时间:2016-1-24 00:24 /
阅读主题, 点击返回1楼
收藏 评论26 发布时间:2016-1-24 00:24
26个回答
ss1969 回答时间:2016-1-25 23:38:45
watershade 发表于 2016-1-25 22:26
我之前做过一个虚拟串口的,觉得程序写得也对,就是调不通,每次接受到的数也都正常但是发送出去被电脑串 ...

中断就是CubeMX直接配置的。。都是默认设定,你要说配错了吧。。RX又是中断方式正常使用。
调试没发现卡在什么地方。。

不过CubeMX 最新版问题是不少,4.12发现eth部分PHY_MICR_INT_OE这个值会生成错误,本来是1写成了2
废鱼 回答时间:2016-1-26 08:56:27
直接调用HAL_UART_Transmit_IT进入发送中断
watershade 回答时间:2016-1-26 09:31:43
ss1969 发表于 2016-1-25 23:38
中断就是CubeMX直接配置的。。都是默认设定,你要说配错了吧。。RX又是中断方式正常使用。
调试没发现卡 ...

我用401做一个实验一下
mr.hs 回答时间:2016-1-26 15:38:57
hal把一切都写好了
在cube里配置好usart 和usart中断
然后调用hal_usart_transmit_it
ok

中断中已经有了处理   不用你加
mr.hs 回答时间:2016-1-26 15:43:22
还有其实重定向比这个好用
ss1969 回答时间:2016-1-26 17:30:49
大概搞清楚了问题所在。。。还是直接跟踪代码最靠谱。
详细解释如下:

首先我先做好的是非中断模式的处理,因为用了一个buffer做xprintf的格式解析,所以做了一个mutex来保护;
然后改成中断函数发送之后。。。。出问题就是因为这个mutex在TX End ISR里面做give不行。。改成giveSemaphoreFromISR也不行(这有点奇怪,尚不知原因)
最后必须用网上例程那种简单的int变量来阻塞才行(TX ISR直接把这个int设1)。

还有一点比较奇怪的就是,CubeMX配置的FreeRTOS工程,即使按照上面的说法用中断方式,在main.c里面*连续*调用2次中断函数发送就会失败,原因是第二次调用发送函数之前,取状态while(busy=SET){}的时候,会一直卡住,第一次发送的完成中断直接无法进入,就无法把busy设成UNSET。在StartDefaultTask里面发送就没有问题。这点也需要高人解惑。如果只调用1次就没问题,第二次call之前一定能够把busy设为UNSET。
ss1969 回答时间:2016-1-26 17:31:43
watershade 发表于 2016-1-26 09:31
我用401做一个实验一下

搞定,见21楼
ss1969 回答时间:2016-1-26 17:31:58
mr.hs 发表于 2016-1-26 15:43
还有其实重定向比这个好用

请举例说一下重定向是怎么做的呢?
田边人 回答时间:2017-9-20 09:47:10
ss1969 发表于 2016-1-26 17:30
大概搞清楚了问题所在。。。还是直接跟踪代码最靠谱。
详细解释如下:

互斥信号量只能用在任务之间,不能用在中断服务函数内,你可以试试其他信号量!!
moneng 回答时间:2018-10-11 16:24:48
  1.     HAL_UART_Transmit_IT(UARTx, (uint8_t*)buffer_it, strlen(buffer_it));
  2.    
  3.     while(UARTx->gState != HAL_UART_STATE_READY)
  4.     {
  5.         Delay_ms(10);
  6.     }
复制代码
ppgpos 回答时间:2020-3-24 18:09:47
ppgpos 回答时间:2020-3-24 18:14:51
那位老哥说的对
  1. HAL_UART_Transmit_IT(&huart1, (uint8_t *)Buffer, (uint16_t)strlen(Buffer));
  2.         while(huart1.gState != HAL_UART_STATE_READY)
  3.                 osDelay(1);
复制代码

这样就可以,但如果HAL_UART_STATE_READY的判断在发送的前面就不行,醉了
12

所属标签

相似问题

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