完善资料让更多小伙伴认识你,还能领取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个回答
|
|
改为中断发送,首先你开启串口的中断没有?
|
|
|
|
开启了的,USART1 global interrupt有勾选(Cube里面只有这一个) 同时RX用中断方式接受无问题。 |
|
|
|
可以把代码传上来或者截图大家好看下,另外你板子用的是哪个?
|
|
|
|
当然不行,应该在IT里面写中断处理程序
|
|
|
|
板子是某stm32的开发板,因为是别人给我的,恕我直言,真不知道是什么型号,只知道是F407 代码如下,自写xprintf: int xprintf(const char *format, ...) { unsigned int index = 0; int k; va_list marker; /* the first parameter location is after passing format */ va_start(marker, format); /* wait until Tx Available translate into string - vxprintf */ UartCheckTxAvailable(); k = vxprintf(UartTxBuffer, &index, format, marker); va_end(marker); /* put out to uart */ // 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)); UartSetTxAvailable(); return k; } |
|
|
|
你只有这段代码没用啊,UartSetTxAvailable(); 是要干嘛?初始化怎么处理的?配置怎么处理的,建议还是从基础多练习几个例程吧,使用HAL库的话不管你用什么板子只要配置好了,应该都没问题的 |
|
|
|
中断模式发送,只是在IT Handler里面设置成可以再次调用吧? 而且就算我没有在HAL_UART_TxCpltCallback里面处理后续,第一次也肯定应该发送得出去才对。。 但是第一次也必然发不出 同时rx一切正常,中断里面一次抓一个,enqueue |
|
|
|
|
|
|
|
仿真一下,进入串口发送以后,周到哪一步出的错。
|
|
|
|
深海零下一度1 发表于 2018-12-10 20:47 我看错了,你说的对。你确定中断设置的对吗? |
|
|
|
深海零下一度1 发表于 2018-12-10 20:47 我之前做过一个虚拟串口的,觉得程序写得也对,就是调不通,每次接受到的数也都正常但是发送出去被电脑串口终端接收就不成。后来发觉是串口终端的问题。但是推测你这个不是这个原因。你在调试的时候时钟卡在while那个地方吗?还是while那个地方已经过去了,但是收不到数据? |
|
|
|
deco_89 发表于 2018-12-10 20:34 UartSetTxAvailable 取mutex而已,后面是give mutex 初始化都是用的cubemx生成的,配置你要说有问题吧,直接block的函数发送又是正常的 说中断配置有问题吧,rx中断又是正常的,rx也是用中断收的。 |
|
|
|
我已经读过函数的说明了,例程没有找到完全可用的,都只是代码片段 而且似乎都是直接用_IT函数发送就成功了,没人提到不行 再次强调,我rx中断方式ok,tx 非中断也ok! |
|
|
|
手里只有stlink可以仿真吗? 顺便请教这个函数是否是 先填好内容,最后到 /* Enable the UART Transmit data register empty Interrupt */ __HAL_UART_ENABLE_IT(huart, UART_IT_TXE); 这里启动发送过程? |
|
|
|
naiztycheng 发表于 2018-12-10 21:40 中断就是CubeMX直接配置的。。都是默认设定,你要说配错了吧。。RX又是中断方式正常使用。 调试没发现卡在什么地方。。 不过CubeMX 最新版问题是不少,4.12发现eth部分PHY_MICR_INT_OE这个值会生成错误,本来是1写成了2 |
|
|
|
直接调用HAL_UART_Transmit_IT进入发送中断
|
|
|
|
我用401做一个实验一下 |
|
|
|
|
|
|
|
还有其实重定向比这个好用
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
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 18:16 , Processed in 1.211141 second(s), Total 83, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号