rt-thread中STM32L431 的LPUART1 open失败的原因
STM32L431 的LPUART1 是低功耗串口,使用LSE或LSI时最大支持9600波特率,大于此波特率需要用PCLK1或SYSCLK,同时如果选择用PCLK1或SYSCLK时波特率必须大于9600,否则初始化会失败
if (HAL_UART_Init(&uart->handle) != HAL_OK) { return -RT_ERROR; }
rt-thread中open device时会先初始化此设备,当打开LPUART1时如果波特率设置有问题则初始化返回失败,导致open失败
低于9600(含)选RCC_LPUART1CLKSOURCE_LSE
否则选择RCC_LPUART1CLKSOURCE_PCLK1
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; if(uartHandle->Instance==LPUART1) { /* USER CODE BEGIN LPUART1_MspInit 0 */ /* USER CODE END LPUART1_MspInit 0 */ /** Initializes the peripherals clock */ PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1; PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_LSE;//≤9600选LSE if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); } /* LPUART1 clock enable */ __HAL_RCC_LPUART1_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); /**LPUART1 GPIO Configuration PC0 ------> LPUART1_RX PC1 ------> LPUART1_TX */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF8_LPUART1; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* USER CODE BEGIN LPUART1_MspInit 1 */ /* USER CODE END LPUART1_MspInit 1 */ } }

                    
                
                
            
        
浙公网安备 33010602011771号