stm32G070 TIM3定时器输入捕获

最近准备搞直流无刷项目,使用stm32G070的定时器3 PA6 PA7 PB0做输入捕获 霍尔状态

​

/* 霍尔传感器相关定时器初始出 */
TIM_HandleTypeDef htimx_hall;

void hall_gpio_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_GPIOB_CLK_ENABLE();
	
	  /* 定时器通道 1 引脚初始化 */
	  GPIO_InitStruct.Pin = GPIO_PIN_6;
	  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
	  GPIO_InitStruct.Pull = GPIO_PULLUP;
	  GPIO_InitStruct.Alternate = GPIO_AF1_TIM3;
	  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	  
	  /* 定时器通道 2 引脚初始化 */
	  GPIO_InitStruct.Pin = GPIO_PIN_7;
	  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	  
	  /* 定时器通道 3 引脚初始化 */
	  GPIO_InitStruct.Pin = GPIO_PIN_0;
	  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}


static void hall_tim_init(void)
{
  TIM_HallSensor_InitTypeDef  hall_sensor_onfig;  
  
  /* 基本定时器外设时钟使能 */
  __TIM3_CLK_ENABLE();
  
  /* 定时器基本功能配置 */
  htimx_hall.Instance = TIM3;
  htimx_hall.Init.Prescaler = 63999;       // 预分频
  htimx_hall.Init.CounterMode = TIM_COUNTERMODE_UP;           // 向上计数
  htimx_hall.Init.Period = 999;             // 计数周期
  htimx_hall.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;     // 时钟分频
  
  hall_sensor_onfig.IC1Prescaler = TIM_ICPSC_DIV1;            // 输入捕获分频
  hall_sensor_onfig.IC1Polarity = TIM_ICPOLARITY_BOTHEDGE;    // 输入捕获极性
  hall_sensor_onfig.IC1Filter = 10;                           // 输入滤波
  hall_sensor_onfig.Commutation_Delay = 0U;                   // 不使用延迟触发
  HAL_TIMEx_HallSensor_Init(&htimx_hall,&hall_sensor_onfig);
  
  HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);    // 设置中断优先级
  HAL_NVIC_EnableIRQ(TIM3_IRQn);            // 使能中断
}

/**
  * @brief  初始化霍尔传感器定时器
  * @param  无
  * @retval 无
  */
void bsp_hall_tim_config(void)
{
	hall_gpio_init();	    // 初始化引脚
	hall_tim_init();      // 初始化定时器
	
	  /* 使能霍尔传感器接口 */
  __HAL_TIM_ENABLE_IT(&htimx_hall, TIM_IT_TRIGGER);
  __HAL_TIM_ENABLE_IT(&htimx_hall, TIM_IT_UPDATE);
  
  HAL_TIMEx_HallSensor_Start(&htimx_hall);
}

/**
  * @brief  霍尔传感器触发回调函数
  * @param  htim:定时器句柄
  * @retval 无
  */
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
{
	/* 获取霍尔传感器引脚状态,作为换相的依据 */
	uint8_t step = 0;


	if (htim == &htimx_hall)   // 判断是否由触发中断产生
	{

	}  
  //HAL_TIM_GenerateEvent(&htimx_bldcm, TIM_EVENTSOURCE_COM);    // 软件产生换相事件,此时才将配置写入
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//更新事件
{

}



void TIM3_IRQHandler(void)
{
	HAL_TIM_IRQHandler(&htimx_hall);
}

[点击并拖拽以移动]
​

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做了不一定能实现但不做一定不会实现

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值