ardarm 发表于 2017-6-7 09:09:48

HAL_UART_Transmit_IT 连续发送问题

1、   该函数发送的数据,在调试的时候,数据是能够能发,但是第二行的数据没有发送出来HAL_UART_Transmit_IT(&Uart5Handle, "123",3);    HAL_UART_Transmit_IT(&Uart5Handle, "456",3);

2、 和STL库不一样,这里的这函数到底发送的应该是一串数据,为何不行?




发表于 2017-6-7 09:18:43

等上次发送完成再进行发送。楼主可以看一下代码,if(husart->State == HAL_USART_STATE_READY)

ardarm 发表于 2017-6-7 13:07:02

安 发表于 2017-6-7 09:18
等上次发送完成再进行发送。楼主可以看一下代码,if(husart->State == HAL_USART_STATE_READY)
。 ...

问题是我用这个 HAL_UART_Transmit_IT (uart1,buff,1); 循环每次发送一个字节,那确实可以发送字符串。但是HAL_UART_Transmit_IT 本来就应该是发送字符串的吧?
这里没搞懂?

发表于 2017-6-7 13:31:23

本帖最后由 安 于 2017-6-7 13:32 编辑

要等上次发送完成,再进行发送。你这样操作,前面数据还没发送完成,后面的数据也不会继续发送。如果想连续发送,不要用中断。或者等待上次发送完成。

zhao.zhao 发表于 2017-6-7 17:14:04

不能连着写在上下行上的,至少要等待第一个函数的数据发送完了以后再发送第二组数据

阴世幽泉 发表于 2020-1-8 00:55:09

ardarm 发表于 2017-6-7 13:07
问题是我用这个 HAL_UART_Transmit_IT (uart1,buff,1); 循环每次发送一个字节,那确实可以发送字符串 ...

HAL_UART_Transmit_IT函数进入,第一个就是判断是否发送被占用 if (huart->gState == HAL_UART_STATE_READY),而gState 值是在UART_EndTransmit_IT函数中被重新置位准备态。因此第一发送数据是字符串,可能数据还没发送完成你就再次调用HAL_UART_Transmit_IT,这时肯定不会响应的,解决这个问题有两种方式,一种是使用HAL_UART_TxCpltCallback回调函数通知外部可以再次发送数据,另外一种办法就是调用HAL_UART_Transmit_IT前先判断if (huart->gState == HAL_UART_STATE_READY)

~惜.缘~ 发表于 2020-2-16 03:35:21

安 发表于 2017-6-7 13:31
要等上次发送完成,再进行发送。你这样操作,前面数据还没发送完成,后面的数据也不会继续发送。如果想连续 ...

为什么使用阻塞发送后,中断接收却不能进中断?

~惜.缘~ 发表于 2020-2-16 03:46:23

阴世幽泉 发表于 2020-1-8 00:55
HAL_UART_Transmit_IT函数进入,第一个就是判断是否发送被占用 if (huart->gState == HAL_UART_STATE_REA ...

HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)str,stringlength);
chardat=0x0D;
HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)&chardat,1);
chardat=0x0A;
HAL_UART_Transmit_IT(&hlpuart1, (uint8_t *)&chardat,1);
请问:如上发送一个命令分三次中断发送,为什么前面的命令进了2次HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart),最后的命令进了3次?(我想实现在HAL_UART_TxCpltCallback中判断if (huart->gState == HAL_UART_STATE_READY),但没有实现)
页: [1]
查看完整版本: HAL_UART_Transmit_IT 连续发送问题