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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版