初级会员

- 积分
- 88
- 金钱
- 88
- 注册时间
- 2018-6-13
- 在线时间
- 15 小时
|
发表于 2018-7-2 09:10:53
|
显示全部楼层
本帖最后由 Sarah 于 2018-7-4 16:02 编辑
目前是IO口上升沿触发外中断,读取定时器的值计算两个上升沿之间的时间差,但有时得到的结果接近于是第一个和第三个上升沿之间的时间差。。。示波器看过不会出现这样的信号,所以觉得会不会是定时器的问题。。。
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
if(HAL_TIM_Base_Start_IT(&htim1)!=HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_IC_Start_IT(&htim1, TIM_CHANNEL_4) != HAL_OK)
{
/* Starting Error */
Error_Handler();
}
while (1)
{
}
}
/* USER CODE BEGIN 4 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)//TI4value!=0
{
if(capture_number==0)
{
last_cnt1=HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_4);
// cur_cnt=last_cnt;
N1=0;
}
else
{
cur_cnt1=HAL_TIM_ReadCapturedValue(&htim1, TIM_CHANNEL_4);
temp1=(cur_cnt1+N1*50000-last_cnt1)/50;
// temp = temp/50;///HAL_RCC_GetHCLKFreq()* (htim1.Init.Prescaler+1)*1000;
if (temp1>570)
{
last_cnt1=cur_cnt1;
TI4_Fre1=temp1;
N1=0;
}
}
capture_number=1;
}
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
N++;
N1++;
}
/* USER CODE END 4 */
|
|