基于HAL库ECB02蓝牙通过串口2串口透传,实现串口2接收中断接收int类型数据
时间: 2023-11-06 15:16:23 浏览: 50
首先需要在HAL库中初始化串口2,并开启中断模式:
```C
/* Initialize UART2 */
UART_HandleTypeDef huart2;
void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
}
/* UART2 interrupt service routine */
void USART2_IRQHandler(void)
{
uint32_t isrflags = READ_REG(huart2.Instance->SR);
uint32_t cr1its = READ_REG(huart2.Instance->CR1);
if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))
{
uint8_t rx_data = (uint8_t)(huart2.Instance->DR & 0xFF);
// TODO: handle received data
}
}
```
然后在主函数中启用中断,并在接收中断处理函数中读取数据并进行类型转换:
```C
int main()
{
// Initialize UART2
MX_USART2_UART_Init();
// Enable UART2 interrupt
HAL_UART_Receive_IT(&huart2, &rx_data, 1);
while (1)
{
// TODO: main loop
}
}
void USART2_IRQHandler(void)
{
uint32_t isrflags = READ_REG(huart2.Instance->SR);
uint32_t cr1its = READ_REG(huart2.Instance->CR1);
if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))
{
uint8_t rx_data = (uint8_t)(huart2.Instance->DR & 0xFF);
int rx_int = (int)rx_data;
// TODO: handle received int data
}
}
```
注意,在此例中,我们使用了`HAL_UART_Receive_IT`函数来启用中断接收模式,并且每次只接收一个字节。在接收中断处理函数中,我们可以通过`huart2.Instance->DR`来读取接收到的数据,并进行类型转换。