|
本帖最后由 hpdell 于 2022-9-26 14:53 编辑
请教下,使用stm32L4S5xx 系列单片机,貌似uart3 中断触发有时不灵 ?
此款单片机一共有 6个 uart, 基本全用上了,目前实际测试发现 uart3 中断有时触发不了,不知道是怎么回事呀 ??
其他几个都可以
#define USART_CR1_RXNEIE USART_CR1_RXNEIE_RXFNEIE
#define USART_CR1_TXEIE USART_CR1_TXEIE_TXFNFIE
static void MX_USART3_UART_Init(void)
{
UART_HandleTypeDef huart3 = {0};
huart3.Instance = USART3;
HAL_UART_DeInit(&huart3);
huart3.Init.BaudRate = 19200; // 115200; 因为外接 rfid 读卡器的默认波特率为 19200
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
SET_BIT(USART3->ICR, USART_ICR_TCCF);
SET_BIT(USART3->RQR, USART_RQR_RXFRQ);
SET_BIT(USART3->CR1, USART_CR1_RXNEIE);
}
else if(uartHandle->Instance==USART3)
{
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART3;
PeriphClkInit.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
/* USART3 clock enable */
__HAL_RCC_USART3_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**USART3 GPIO Configuration
PC4 ------> USART3_TX
PC5 ------> USART3_RX
*/
GPIO_InitStruct.Pin = GPS_TX_Pin|GPS_RX_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM; // GPIO_SPEED_FREQ_LOW
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* USART3 interrupt Init */
HAL_NVIC_SetPriority(USART3_IRQn, 7, 0);
HAL_NVIC_EnableIRQ(USART3_IRQn);
}
|
|