TIM ETR 配置

  • 1. 例程背景
  • 2.配置
  • 3. 生成代码
  • 4. 补充
    • 4.1.HAL库不需要重映射
    • 4.2 HAL库不需要添加TIM ETR设置代码

1. 例程背景

用的步进电机,功能调试完成,能走能停的。但是出现 走的距离并不是实际的物理长度,总是出现或大或小的偏差,造成精度不高。
由于没有用到编码器,作为输出反馈,只能决定先做个实验,捕获下实际输出的脉冲数量。用的 TIM ETR。

STM32F429IGT6, 根据板子情况,选择PA5,TIM2_ETR,

2.配置


parameter settings 默认。
gpio settings 中的上下拉根据自己的电路情况设置。
NVIC 用到的,也要设置。
另外,根据自己电路情况,输入有光耦隔离的,要注意自己光耦器件的电源要不要代码控制,我电路的光耦电源是要自己写代码驱动的。默认板子光耦是无电源的。因此输入是无效的。

3. 生成代码

直接生成代码就可以了。引脚重映射代码里也自动配置好,不用额外代码

/* Includes ------------------------------------------------------------------*/
#include "tim.h"/* USER CODE BEGIN 0 *//* USER CODE END 0 */TIM_HandleTypeDef htim2;/* TIM2 init function */
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 = 0;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 0xffffffff;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;sClockSourceConfig.ClockFilter = 0;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 */HAL_TIM_Base_Start(&htim2); //非自动生成/* USER CODE END TIM2_Init 2 */}void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};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();__HAL_RCC_GPIOA_CLK_ENABLE();/**TIM2 GPIO ConfigurationPA5     ------> TIM2_ETR*/GPIO_InitStruct.Pin = GPIO_PIN_5;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* 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 GPIO ConfigurationPA5     ------> TIM2_ETR*/HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5);/* USER CODE BEGIN TIM2_MspDeInit 1 *//* USER CODE END TIM2_MspDeInit 1 */}
}

使用的使用,需启动定时器

/* USER CODE BEGIN 1 */
/*启动定时器*/
HAL_TIM_Base_Start(&htim2);uint32_t n_Counter1;
static void TIM2_ETRGetCounter(void)
{n_Counter1 = htim2.Instance->CNT;  /*标准库获取计数器值用TIM_GetCounter函数,HAL函数中,没找到,直接调用值即可*/
}
/* USER CODE END 1 */

4. 补充

4.1.HAL库不需要重映射

标准库中 F4 需要 GPIO_PinAFConfig(ETR_GPIO_PORT,GPIO_PinSource5,GPIO_AF_TIM2);
但是 HAL库不用,因为HAL_GPIO_Init时,已经做好

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init)
{........................../* In case of Alternate function mode selection */if((GPIO_Init->Mode & GPIO_MODE) == MODE_AF){/* Check the Alternate function parameter */assert_param(IS_GPIO_AF(GPIO_Init->Alternate));/* Configure Alternate function mapped with the current IO */temp = GPIOx->AFR[position >> 3U];temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ;temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & 0x07U) * 4U));GPIOx->AFR[position >> 3U] = temp;}/* Configure IO Direction mode (Input, Output, Alternate or Analog) */temp = GPIOx->MODER;temp &= ~(GPIO_MODER_MODER0 << (position * 2U));temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2U));GPIOx->MODER = temp;
..........................
}

4.2 HAL库不需要添加TIM ETR设置代码

标准库中
TIM_ETRClockMode2Config(GENERAL_TIM, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
HAL库中
定时器时钟源配置时,已经设置

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;sClockSourceConfig.ClockFilter = 0;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}/*** @brief   Configures the clock source to be used* @param  htim TIM handle* @param  sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that*         contains the clock source information for the TIM peripheral.* @retval HAL status*/
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig)
{switch (sClockSourceConfig->ClockSource){case TIM_CLOCKSOURCE_ETRMODE2:{/* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance));/* Check ETR input conditioning related parameters */assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));/* Configure the ETR Clock source */TIM_ETR_SetConfig(htim->Instance,sClockSourceConfig->ClockPrescaler,sClockSourceConfig->ClockPolarity,sClockSourceConfig->ClockFilter);/* Enable the External clock mode2 */htim->Instance->SMCR |= TIM_SMCR_ECE;break;}}
}

所以STM32CubeMX生成代码后,直接启动定时器就可以了。

/*启动定时器*/
HAL_TIM_Base_Start(&htim2);

TIM ETR 配置相关推荐

  1. 【STM32】【STM32CubeMX】STM32CubeMX的使用之五:定时器时基配置及其中断

    文章目录 0.前言 1.CubeMX上的TIM 2.软件设计   下载工程文件:   https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151- ...

  2. STM32F0xx_TIM输入捕获(计算频率)配置详细过程

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:h ...

  3. 【STM32G4】备战蓝桥杯嵌入式---模块配置---TIM_Output_Compare

    文章目录 前言 TIM_Output_Compare 1.TIM_Output_Compare原理 1.定时器通道的工作模式 2.输出比较模式简介 3.如何输出不同频率的方波 4.如何输出不同频率的可 ...

  4. 一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b)

    一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b) 写在前面 1.stm32cub ...

  5. IBM TIM API 使用手册

    一.连接TIM的配置 1,  修改JDK(IBM Java60)目录下的文件[java.security] 2,  现在从Tim安装目录下下载was登录配置文件[jaas_login_was.conf ...

  6. 【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化

    [蓝桥杯嵌入式]比赛笔记(2)根据固件库快速配置各模块初始化 因为蓝桥杯比赛时间很短,并且如果自己去记忆各模块初始化的话,也难免有问题,所以这里给出一个通过固件库的快速初始化模块的方法. 比赛提供固件 ...

  7. 【正点原子MP157连载】第十七章 通用定时器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  8. STM32----通用定时器TIM2~TIM5的三种功能

    通用定时器TIM2~5 引脚定义 TIM2_CH1------PA0 TIM2_CH2------PA1 TIM2_CH3------PA2 TIM2_CH4------PA3 TIM3_CH1--- ...

  9. dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存

    引言 ADC 的功能是将模拟信号采样得到数字信号,而有些时候,我们需要使用到定时采样,比如在计算一个采集的波形的频率的时候,我们需要精确的知道采样频率,也就是 1 s 内采集的点数,这个时候,就需要使 ...

  10. 【STM32】【STM32CubeMX】STM32CubeMX的使用之七:定时器输入捕获实现超声波测距

    文章目录 0.前言 1.硬件设计 1.1.超声波模块 1.2.STM32L151 2.CubeMX配置 3.软件设计   下载工程文件:   https://gitee.com/Joseph_Coop ...

最新文章

  1. @InsertProvider 实现批量插入数据
  2. 谷歌zxing 二维码生成工具
  3. 为什么我的理论和实践之间的差距相对较大
  4. ssh框架分页显示问题
  5. nssl1336-膜拜神牛【LIS】
  6. raid重构原理_5个重构原理示例
  7. 密度图的密度估计_不同类型的二维密度图小教程
  8. ubuntu重命名移动硬盘
  9. json c语言 数组转字符串数组中,json和字符串/数组/集合的互相转换の神操作总结...
  10. 服务器双网卡导致的网络故障及解决方案
  11. 谷歌自动启动flash
  12. 安卓psp模拟器哪个好_psp模拟器安卓完美版下载_psp模拟器完美版手机版下载_玩游戏网...
  13. Vivado中各个文件的含义
  14. [论文笔记]Fader Networks: Manipulating Images by Sliding Attributes(2017 NIPS)
  15. Excel常用技巧笔记
  16. 今晚7:30 | 面向人类和多智能策略的评估
  17. 图形学的三种拾取实现与比较
  18. nagios监控 mysql 表结构
  19. 增值翻译系列谈(01)——概念界定和辨析
  20. Shiro(4)整合SpringBoot2.x

热门文章

  1. Windows 罕见技巧全集3
  2. 手机型号云服务器,手机型号云服务器
  3. VirtualBox安装增强工具时:Unable to install guest additions: unknown filesystem type 'iso9660'
  4. Java 时间差运算工具函数(时间戳运算)
  5. IDE工具、文本编辑器的列块编辑模式
  6. 哈希(散列)函数的一些应用
  7. 西门子smart200模拟量与左移右移指令
  8. win32gui操作
  9. 目标跟踪技术及其数据集
  10. wamp5 开启 ssl