2020-08-02 08:43 PM
Hello friends
I'm communicating with uart.
finishing operations on interrupt and while going back
but does not go back to interrupt
my codes
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for(int i=0; i<7; i++)
{
rx_buffer[i]='\0';
}
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_Delay(1000);
}
/* USER CODE END 3 */
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART2)
{
reg_CTS = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_CTS);
reg_LBD = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_LBD);
reg_TXE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_TXE);
reg_TC = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_TC);
reg_RXNE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE);
reg_IDLE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE);
reg_ORE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_ORE);
reg_NE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_NE);
reg_FE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_FE);
reg_PE = __HAL_UART_GET_FLAG(&huart2,UART_FLAG_PE);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
if(rx_buffer[0]==0x65 && rx_buffer[1]==0x00 && rx_buffer[2]==0x01 && rx_buffer[3]==0x01 &&
rx_buffer[4]==0xFF && rx_buffer[5]==0xFF && rx_buffer[6]==0xFF)
{
count++;
}
if(rx_buffer[0]==0x65 && rx_buffer[1]==0x00 && rx_buffer[2]==0x02 && rx_buffer[3]==0x01 &&
rx_buffer[4]==0xFF && rx_buffer[5]==0xFF && rx_buffer[6]==0xFF)
{
count++;
}
// for(int i=0; i<7; i++)
// {
// rx_buffer[i]='\0';
// }
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);
}
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
}
and register
2020-08-04 05:17 AM
I don't see HAL_UART_Receive_IT in your code. For each HAL_UART_Receive_IT, HAL_UART_RxCpltCallback is called once when the specified number of bytes were read.