完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
为何HAL_UART_Transmit可发送,改成HAL_UART_Transmit_IT就不行了 cube配置的STM32f407系统 其他代码均一样 while(HAL_OK != HAL_UART_Transmit_IT(DEFAULT_UART, (uint8_t*)UartTxBuffer, index)); //不行 while(HAL_OK != HAL_UART_Transmit(DEFAULT_UART, (uint8_t*)UartTxBuffer, index, 0xFFFF)); //可以 ---- 搞定,见21楼 |
|
相关推荐
1 条评论
24个回答
|
|
大概搞清楚了问题所在。。。还是直接跟踪代码最靠谱。
详细解释如下: 首先我先做好的是非中断模式的处理,因为用了一个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。 |
|
|
|
|
|
|
|
|
|
|
|
互斥信号量只能用在任务之间,不能用在中断服务函数内,你可以试试其他信号量!! |
|
|
|
在发送中断下面加延时就可以了,就像这样HAL_UART_Transmit_IT(&huart1,Msg_Tx,TX_LENGTH_MIN);
HAL_Delay(1000); |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2136 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1970 浏览 3 评论
4566 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2116 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2629 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:49 , Processed in 0.508081 second(s), Total 52, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号