你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F1HAL,TIM2定时printf打印出现丢数值

[复制链接]
Elsa_Li 提问时间:2024-6-3 11:42 / 未解决

芯片:STM32F103C8T6 环境:STM32CubeMX和STM32CubeIDE 库:STM32F1HAL 问题:TIM2定时5秒->UART1 printf打印浮点数,偶尔出现数据丢失。(printf打印放在main里面没有这个情况)

例子如 float A=25.6666;float B=24.7777; 实际打印出来: 第一种情况:A=2.0000;B=0.0000; 第二种情况:A=-2.0000; B=-26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192.000000 偶尔会出现以上情况,除此之外正常打印浮点数。

void MX_TIM2_Init(void)

{

/ USER CODE BEGIN TIM2_Init 0 /

/ USER CODE END TIM2_Init 0 /

TIM_ClockConfigTypeDef sClockSourceConfig = {0};

TIM_MasterConfigTypeDef sMasterConfig = {0};

/ USER CODE BEGIN TIM2_Init 1 /

/ USER CODE END TIM2_Init 1 /

htim2.Instance = TIM2;

htim2.Init.Prescaler = 6400-1;

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

htim2.Init.Period = 50000-1;

htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

if (HAL_TIM_Base_Init(&htim2) != HAL_OK)

{

Error_Handler(); }

sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)

{

Error_Handler(); }

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)

{

Error_Handler(); }

/ USER CODE BEGIN TIM2_Init 2 /

/ USER CODE END TIM2_Init 2 /

}

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)

{

if(tim_baseHandle->Instance==TIM2)

{

/ USER CODE BEGIN TIM2_MspInit 0 /

/ USER CODE END TIM2_MspInit 0 /

/ TIM2 clock enable /

__HAL_RCC_TIM2_CLK_ENABLE();

/ TIM2 interrupt Init /

HAL_NVIC_SetPriority(TIM2_IRQn, 11, 0);

HAL_NVIC_EnableIRQ(TIM2_IRQn); / USER CODE BEGIN TIM2_MspInit 1 /

/ USER CODE END TIM2_MspInit 1 /

}

}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)

{

if(tim_baseHandle->Instance==TIM2)

{

/ USER CODE BEGIN TIM2_MspDeInit 0 /

/ USER CODE END TIM2_MspDeInit 0 /

/ Peripheral clock disable /

__HAL_RCC_TIM2_CLK_DISABLE();

/ TIM2 interrupt Deinit /

HAL_NVIC_DisableIRQ(TIM2_IRQn); / USER CODE BEGIN TIM2_MspDeInit 1 /

/ USER CODE END TIM2_MspDeInit 1 /

}

}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

if(htim->Instance == htim2.Instance)

{ float A=25.6666;float B=24.7777;

if(printSoftwareVersion==1)

{

printSoftwareVersion=0;

printf("Software Version: M01_200mA_V03 \r\n"); }

if(printEnabled==1)

{

printf("T-Set:%.4f \r\n",A);

printf("T-Act:%.4f \r\n",B);

}

}

} image.png image.png

收藏 评论2 发布时间:2024-6-3 11:42

举报

2个回答
shenxiaolin_mai 回答时间:2024-6-3 12:20:54

重定向的时候要有一个while 函数等待发送完成之后再发送另一个字节,都是这样处理的。

butterflyspring 回答时间:2024-6-3 14:32:05
另一个帖子有小伙伴做过验证了,在定时中断里打印,结果是正常的。


建议楼主也用最简单的代码试试,排除逻辑上出错的可能。

STM32CubeIDE printf浮点数,浮点数丢失数值 (stmicroelectronics.cn)
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版