TIM ETR 配置
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 配置相关推荐
- 【STM32】【STM32CubeMX】STM32CubeMX的使用之五:定时器时基配置及其中断
文章目录 0.前言 1.CubeMX上的TIM 2.软件设计 下载工程文件: https://gitee.com/Joseph_Cooper/stm32-cube-mx-stm32-l151- ...
- STM32F0xx_TIM输入捕获(计算频率)配置详细过程
推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:h ...
- 【STM32G4】备战蓝桥杯嵌入式---模块配置---TIM_Output_Compare
文章目录 前言 TIM_Output_Compare 1.TIM_Output_Compare原理 1.定时器通道的工作模式 2.输出比较模式简介 3.如何输出不同频率的方波 4.如何输出不同频率的可 ...
- 一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b)
一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b) 写在前面 1.stm32cub ...
- IBM TIM API 使用手册
一.连接TIM的配置 1, 修改JDK(IBM Java60)目录下的文件[java.security] 2, 现在从Tim安装目录下下载was登录配置文件[jaas_login_was.conf ...
- 【蓝桥杯嵌入式】比赛笔记(2)根据固件库快速配置各模块初始化
[蓝桥杯嵌入式]比赛笔记(2)根据固件库快速配置各模块初始化 因为蓝桥杯比赛时间很短,并且如果自己去记忆各模块初始化的话,也难免有问题,所以这里给出一个通过固件库的快速初始化模块的方法. 比赛提供固件 ...
- 【正点原子MP157连载】第十七章 通用定时器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- STM32----通用定时器TIM2~TIM5的三种功能
通用定时器TIM2~5 引脚定义 TIM2_CH1------PA0 TIM2_CH2------PA1 TIM2_CH3------PA2 TIM2_CH4------PA3 TIM3_CH1--- ...
- dma和通道的区别_STM32 定时器触发 ADC 多通道采集,DMA搬运至内存
引言 ADC 的功能是将模拟信号采样得到数字信号,而有些时候,我们需要使用到定时采样,比如在计算一个采集的波形的频率的时候,我们需要精确的知道采样频率,也就是 1 s 内采集的点数,这个时候,就需要使 ...
- 【STM32】【STM32CubeMX】STM32CubeMX的使用之七:定时器输入捕获实现超声波测距
文章目录 0.前言 1.硬件设计 1.1.超声波模块 1.2.STM32L151 2.CubeMX配置 3.软件设计 下载工程文件: https://gitee.com/Joseph_Coop ...
最新文章
- @InsertProvider 实现批量插入数据
- 谷歌zxing 二维码生成工具
- 为什么我的理论和实践之间的差距相对较大
- ssh框架分页显示问题
- nssl1336-膜拜神牛【LIS】
- raid重构原理_5个重构原理示例
- 密度图的密度估计_不同类型的二维密度图小教程
- ubuntu重命名移动硬盘
- json c语言 数组转字符串数组中,json和字符串/数组/集合的互相转换の神操作总结...
- 服务器双网卡导致的网络故障及解决方案
- 谷歌自动启动flash
- 安卓psp模拟器哪个好_psp模拟器安卓完美版下载_psp模拟器完美版手机版下载_玩游戏网...
- Vivado中各个文件的含义
- [论文笔记]Fader Networks: Manipulating Images by Sliding Attributes(2017 NIPS)
- Excel常用技巧笔记
- 今晚7:30 | 面向人类和多智能策略的评估
- 图形学的三种拾取实现与比较
- nagios监控 mysql 表结构
- 增值翻译系列谈(01)——概念界定和辨析
- Shiro(4)整合SpringBoot2.x