首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32L4xx美国Low低温

STM32L4xx美国Low低温
EN

Stack Overflow用户
提问于 2018-10-11 08:25:31
回答 2查看 466关注 0票数 1

我对基于TSM32L4xx单片机的电子板有问题。我使用HAL驱动程序进行所有外围设备初始化。我用USART3与计算机进行RS232通讯,当单片机上升到-6°C以下(在冻结状态下)时,微控制器上的传输工作,而不是接收(中断没有上升)。USART由SYSCLOCK初始化:

代码语言:javascript
复制
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    [...]
    USARTx_RCC_CONFIG(RCC_USART3CLKSOURCE_SYSCLK);
    [...]
}

我读到在零度下PLL可以停下来工作,但我不使用它.

这是我的系统时钟初始化:

代码语言:javascript
复制
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,用实验室示波器进行了测量。

有人遇到过这个问题吗?有人知道这个问题吗?

提前谢谢你,

巴普蒂斯特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的温度范围内,精度下降。

票数 1
EN

Stack Overflow用户

发布于 2018-10-11 15:58:28

UART对时钟变化非常敏感,特别是在一次发送更多数据时。

您需要使用具有良好温度稳定性的晶体振荡器,或发送非常小的数据块,或检查内部温度传感器并相应更改波特值设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52755521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档