我对基于TSM32L4xx单片机的电子板有问题。我使用HAL驱动程序进行所有外围设备初始化。我用USART3与计算机进行RS232通讯,当单片机上升到-6°C以下(在冻结状态下)时,微控制器上的传输工作,而不是接收(中断没有上升)。USART由SYSCLOCK初始化:
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
[...]
USARTx_RCC_CONFIG(RCC_USART3CLKSOURCE_SYSCLK);
[...]
}我读到在零度下PLL可以停下来工作,但我不使用它.
这是我的系统时钟初始化:
void InitSystemClock(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
RCC_OSCILLATORTYPE_MSI|RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI
| RCC_OSCILLATORTYPE_MSI
| RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = 0;
RCC_OscInitStruct.MSIClockRange = CLOCK_RANGE;
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_OFF;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
DWT->CTRL |= 1; //CYCCNTENA
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
/* GPIO Ports Clock Enable */
__GPIOA_CLK_ENABLE();
__GPIOB_CLK_ENABLE();
__GPIOC_CLK_ENABLE();
__GPIOD_CLK_ENABLE();
__GPIOE_CLK_ENABLE();}
编辑:我做了一个交互测试:我配置了一个脉宽调制(使用timer2通道3和4)。PWM产生375 The频率。将电子板放入冰箱后,在-18℃温度下,PWM降至345 at,用实验室示波器进行了测量。
有人遇到过这个问题吗?有人知道这个问题吗?
提前谢谢你,
巴普蒂斯特
发布于 2018-10-12 07:17:39
假设您使用USART作为UART:
如果你有一个准确的参考频率,如LSE,你可以执行一个RC校准根据温度,见RCC_ICSCR寄存器。内部温度传感器是可用的。
此申请说明演示如何校准内部RCs。
在30°C时,HSI16振荡器的精度为±0.5%,HSI48振荡器的精度为±0.6%,HSI48振荡器的精度为±4%。但在-40°C ~ 105°C的温度范围内,精度下降。
发布于 2018-10-11 15:58:28
UART对时钟变化非常敏感,特别是在一次发送更多数据时。
您需要使用具有良好温度稳定性的晶体振荡器,或发送非常小的数据块,或检查内部温度传感器并相应更改波特值设置。
https://stackoverflow.com/questions/52755521
复制相似问题