STM32F103 UCOSIII 加入DS18B20温度传感器 解决不能正常读数问题
前言:
在UCOSIII中加入DS18B20后,会发现检测出的数字特别大,而且波动很大就是一些无规则随机数一样,裸机运行明明是没问题的(这个问题困扰了3天),网上查了一下,发现出现此问题的不止我一个人,有的朋友还出现了数值一直显示为0,而且都是在移植到实时操作系统中的时候才出现这个问题。解决方法是给温度传感器单独写延时函数,修改后发现,运行成功!
这里给出代码:
time.h
#ifndef __TIMER_H #define __TIMER_H #include "sys.h" void Delay_Timer_Init(void); void Delay_Timer_us(uint32_t us_cnt); #endif
time.c
#include "time.h" void Delay_Timer_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct); TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Down; TIM_TimeBaseInitStruct.TIM_Period = 100-1; TIM_TimeBaseInitStruct.TIM_Prescaler = (72-1); TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct); while((TIM3->SR & TIM_FLAG_Update)!=SET); TIM3->SR = (uint16_t)~TIM_FLAG_Update; } void Delay_Timer_us(uint32_t us_cnt) { TIM3->CNT = us_cnt-1; TIM3->CR1 |= TIM_CR1_CEN; while((TIM3->SR & TIM_FLAG_Update)!=SET); TIM3->SR = (uint16_t)~TIM_FLAG_Update; TIM3->CR1 &= ~TIM_CR1_CEN; }
将ds18b20.c中的延时函数全部改为新写的延时函数