我已经设置了使用 HSI 时钟计时的 UART1,驱动程序版本为 1.16
导致输出不正确就行了。
与驱动程序版本 1.14 相同的代码工作得很好。见图片。
原来时钟设置中的 HSI 微调值不正确
- RCC_OscInitTypeDef RCC_OscInitStruct = {0};
- RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
- RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
- /** Initializes the CPU, AHB and APB busses clocks
- */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;
- /* RCC_HSICALIBRATION_DEFAULT seems to be wrong */
- RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /** Initializes the CPU, AHB and APB busses clocks
- */
在不同版本的驱动程序中,它被硬编码为不同的值:
v 1.14 - 0x10u
v 1.16 - 0x40u
此外,当我进入调试模式并检查寄存器中的实际值时,在第一种情况下它是相同的,但在第二种情况下它是 0,而不是 0x40u。
手动将值替换为 0x10u 解决了这个问题。
请检查一下。