cubemx配置的串口中断发送HAL_UART_Transmit_IT问题(搞定见#21)
本帖最后由 ss1969 于 2016-1-26 17:31 编辑为何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楼
HAL_UART_Transmit_IT(UARTx, (uint8_t*)buffer_it, strlen(buffer_it));
while(UARTx->gState != HAL_UART_STATE_READY)
{
Delay_ms(10);
} 改为中断发送,首先你开启串口的中断没有? mark0668 发表于 2016-1-24 12:49
改为中断发送,首先你开启串口的中断没有?
开启了的,USART1 global interrupt有勾选(Cube里面只有这一个)
同时RX用中断方式接受无问题。 可以把代码传上来或者截图大家好看下,另外你板子用的是哪个? 当然不行,应该在IT里面写中断处理程序 回到未来~ 发表于 2016-1-25 08:41
可以把代码传上来或者截图大家好看下,另外你板子用的是哪个?
板子是某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;
}
ss1969 发表于 2016-1-25 10:08
板子是某stm32的开发板,因为是别人给我的,恕我直言,真不知道是什么型号,只知道是F407
代码如下,自 ...
你只有这段代码没用啊,UartSetTxAvailable(); 是要干嘛?初始化怎么处理的?配置怎么处理的,建议还是从基础多练习几个例程吧,使用HAL库的话不管你用什么板子只要配置好了,应该都没问题的 watershade 发表于 2016-1-25 09:08
当然不行,应该在IT里面写中断处理程序
中断模式发送,只是在IT Handler里面设置成可以再次调用吧?
而且就算我没有在HAL_UART_TxCpltCallback里面处理后续,第一次也肯定应该发送得出去才对。。
但是第一次也必然发不出
同时rx一切正常,中断里面一次抓一个,enqueue 楼主 其实那两个函数并不一样。
上面各位的建议都非常 好,看看注释,借助例程自己捣鼓几下就知道差别了。 仿真一下,进入串口发送以后,周到哪一步出的错。