我正在尝试向测量设备发送请求,并使用带中断的UART接收它的响应。然而,通信不稳定,我收到了不完整或损坏的响应。我不确定,但我认为这是因为切换驱动器使能信号。你能看看我的代码并给我一些建议吗?我哪里做错了?
下面是我的代码:
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART3_UART_Init();
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //RS 485 transmit mode
while (1)
{
if(HAL_UART_Transmit_IT(&huart3, (uint8_t*)aTxBuffer, 2) != HAL_OK)
{
while(1);
}
while (UartReady != SET);
UartReady = RESET;
if(HAL_UART_Receive_IT(&huart3, (uint8_t*)aRxBuffer, 4) != HAL_OK)
{
while(1);
}
while (UartReady != RESET);
//do somethink with received data
}
}下面是我的回调函数:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET); //RS 485 receive mode
//DataRecieved = 0;
UartReady = SET;
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
/* Set transmission flag: transfer complete */
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //RS 485 transmit mode
//DataRecieved = 1;
UartReady = SET;
}非常感谢
发布于 2018-05-15 17:11:55
你传输的数据,是否也会出现在你的RX-buffer中,而你并不期望它会出现?
发布于 2018-05-21 17:30:31
我收到不完整或损坏的响应。我不确定,但我认为这是因为切换驱动器使能信号。你能看看我的代码并给我一些建议吗?我哪里做错了?
不确定,但也许在中断回调函数中切换DE引脚会有所帮助,而是在调用HAL_UART_Transmit_IT()之前切换到“传输模式”,然后在传输之后切换回接收模式,甚至在调用HAL_UART_Receive_IT()之后切换回接收模式,以确保它能够捕获传入的字节。微小的延迟有时确实很重要:
void set_transmit_mode(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); // RS 485 transmit mode
}
void set_receive_mode(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); // RS 485 receive mode
}
{
//...
set_transmit_mode();
if (HAL_UART_Transmit_IT(&huart3, (uint8_t*)aTxBuffer, 2) != HAL_OK) {
// ...
}
while (UartReady != SET);
//set_receive_mode();
UartReady = RESET;
if (HAL_UART_Receive_IT(&huart3, (uint8_t*)aRxBuffer, 4) != HAL_OK) {
// ...
}
set_receive_mode();
while (UartReady != RESET);
//...
}https://stackoverflow.com/questions/49944685
复制相似问题