你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
安 发表于 2017-6-7 09:18 等上次发送完成再进行发送。楼主可以看一下代码,if(husart->State == HAL_USART_STATE_READY) 。 ...
ardarm 发表于 2017-6-7 13:07 问题是我用这个 HAL_UART_Transmit_IT (uart1,buff,1); 循环每次发送一个字节,那确实可以发送字符串 ...
安 发表于 2017-6-7 13:31 要等上次发送完成,再进行发送。你这样操作,前面数据还没发送完成,后面的数据也不会继续发送。如果想连续 ...
阴世幽泉 发表于 2020-1-8 00:55 HAL_UART_Transmit_IT函数进入,第一个就是判断是否发送被占用 if (huart->gState == HAL_UART_STATE_REA ...
。
问题是我用这个 HAL_UART_Transmit_IT (uart1,buff,1); 循环每次发送一个字节,那确实可以发送字符串。但是HAL_UART_Transmit_IT 本来就应该是发送字符串的吧?
这里没搞懂?
要等上次发送完成,再进行发送。你这样操作,前面数据还没发送完成,后面的数据也不会继续发送。如果想连续发送,不要用中断。或者等待上次发送完成。
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)
为什么使用阻塞发送后,中断接收却不能进中断?
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),但没有实现)