|
芯片: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); } } }
|
串口DMA收发出现ORE错误
STM32 增加 WiFi + 以太网的低成本方案
KEILMDK每次都要手动选Reset and Run吗 不然下载到板子上得重启电源才行 求解答
HAL_TIM_OC_SetConfigChannel 因 override_state 参数触发断言报错
在RS485通信中如何有效避免误码,距离5米,速率115200
在 STM32Cube 中配置正交编码器模式
STM32F103的USB的虚拟串口,串口助手打开的时候会收到两条数据,第一条数据是前5秒串口助手未打开时发送的,这怎么解决?
询问电源纹波对芯片的影响
STM32F103C8T6 上电后无法通过串口发出数据的问题?
stm32H723 tim23和tim24 中间对齐模式无效
微信公众号
手机版
重定向的时候要有一个while 函数等待发送完成之后再发送另一个字节,都是这样处理的。
建议楼主也用最简单的代码试试,排除逻辑上出错的可能。
STM32CubeIDE printf浮点数,浮点数丢失数值 (stmicroelectronics.cn)