这些基础的东西看视频很费时间而且有过基础的在学习只是库不太清楚,希望我总结的库使用的一些使用能节约一点大家的时间。

void TIM3_Init(u16 arr,u16 psc)

{  
    TIM3_Handler.Instance=TIM3;                          //通用定时器3
    TIM3_Handler.Init.Prescaler=psc;                     //分频系数
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
    TIM3_Handler.Init.Period=arr;                        //自动装载值
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
    HAL_TIM_Base_Init(&TIM3_Handler);
    
    HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   
}

HAL库的特点就是有很多结构体嵌套这样一个句柄就可以配置所有的函数非常方便。

就在HAL_TIM_Base_Init(&TIM3_Handler);函数中有调用 HAL_TIM_Base_MspInit(htim);函数在这个函数里配置NVIC中断优先级配置。

进入中断配置我们都不需要配置只要在回调函数中写上我们想执行的函数就可以了,超级简单而且只要搞清楚回调函数这个函数实际上就类似于我们配置判断中断产生后执行只是把我们想执行的东西放到一个函数调用中实现。非常简洁

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
    if(htim->Instance==TIM3)
{
__HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3时钟
HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断   
}
}

//定时器3中断服务函数
void TIM3_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&TIM3_Handler);
}

//回调函数,定时器中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==(&TIM3_Handler))
    {
        LED1=!LED1;        //LED1反转
    }
}

理解了我们就看通用定时器很常用的两个功能 (我一般就是PWM 控制电机和编码器反馈转速这两个功能,个人个感觉很实用自己写个函数测试一下)

编码器我整整调了三天,以前没有自己写过直接拿来用,现在自己写发现自己不了解的太多了TIM_HandleTypeDef TIM4_Handler;         //定时器4句柄

TIM_Encoder_InitTypeDef TIM4_Encoder_Handler;

//定时器4通道1输入捕获配置
//arr:自动重装值(TIM2,TIM4是16位的!!)
//psc:时钟预分频数
void TIM4_Encoder_Configration(u16 arr,u16 psc)
{   
  TIM4_Handler.Instance=TIM4;
TIM4_Handler.Init.Prescaler=0;                     //分频系数
TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
TIM4_Handler.Init.Period=65535;                        //自动装载值
TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频银子
//HAL_TIM_Base_Init(&TIM4_Handler);//HAL_TIM_OC_Init(&TIM4_Handler);

TIM4_Encoder_Handler.EncoderMode=TIM_ENCODERMODE_TI12;
TIM4_Encoder_Handler.IC1Filter=0;
TIM4_Encoder_Handler.IC1Polarity=TIM_ICPOLARITY_RISING;
TIM4_Encoder_Handler.IC1Prescaler=TIM_ICPSC_DIV1;
TIM4_Encoder_Handler.IC1Selection=TIM_ICSELECTION_DIRECTTI;

TIM4_Encoder_Handler.IC2Filter=0;
TIM4_Encoder_Handler.IC2Polarity=TIM_ICPOLARITY_RISING;
TIM4_Encoder_Handler.IC2Selection=TIM_ICSELECTION_DIRECTTI;
TIM4_Encoder_Handler.IC2Prescaler=TIM_ICPSC_DIV1;
HAL_TIM_Encoder_Init(&TIM4_Handler,&TIM4_Encoder_Handler);

HAL_TIM_Encoder_Start(&TIM4_Handler,TIM_CHANNEL_ALL);
HAL_TIM_Encoder_Start_IT(&TIM4_Handler,TIM_CHANNEL_ALL);//开启中断
TIM4->CNT=0;
  __HAL_TIM_ENABLE_IT(&TIM4_Handler,TIM_IT_UPDATE);   //使能更新中断一定要使能这一句话困扰了我两天
  //__HAL_TIM_ENABLE(&TIM4_Handler);
}

void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim)
{   
GPIO_InitTypeDef GPIO_Initure;
if(htim->Instance==TIM4)
  {
    __HAL_RCC_GPIOD_CLK_ENABLE(); //开启GPIOA时钟
    __HAL_RCC_TIM4_CLK_ENABLE();            //使能TIM3时钟
    GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_13;            //PA0
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;      //输入
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
    GPIO_Initure.Alternate=GPIO_AF2_TIM4;   //PA0复用为TIM4通道1
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);

HAL_NVIC_SetPriority(TIM4_IRQn,2,0);    //设置中断优先级,抢占优先级2,子优先级0
HAL_NVIC_EnableIRQ(TIM4_IRQn);          //开启ITM4中断通道

//
//    HAL_NVIC_EnableIRQ(TIM4_IRQn);          //开启ITM4中断通道

//ARPE使能 
TIM4->CNT=0;
    //TIM4->CNT = 0;
 //   __HAL_RCC_TIM4_CLK_ENABLE();//配置定时器四开启
}

}

补充一下 使用到HAL 库的一些文件是

时钟配置RCC:stm32f429xx_hal_rcc.h

GPIO配置:stm32f429xx_hal_gpio.h   时钟复用配置:stm32f429xx_gpio_ex.h

UART配置:stm32f429xx_hal_time.h

程序中一些配置中断系统定义中断在 32f429xx.h(这个因你用的mcu的版本而定我用的是正点原子F429IGT)

我在定时器里读取TIM4->CNT位就可以得到转速的了。看到网上也没有做过的就发了一份。有需要就拿走吧

电机PID控制

STM32F429HAL库定时器学习笔记相关推荐

  1. STM32F429HAL库ADCDMA学习笔记

    昨天做了一个ADC的程序一直想学习一下DMA的配置,我一直也是不懂DMA到底有什么用处,还是感觉很鸡肋.稍微配置了一下,我是这样理解DMA的.在配置了dma之后我们adc的数据不会再由cpu搬运,我们 ...

  2. STM32F429HAL库UART学习笔记

    UART串口通讯作为最基本通讯协议我就不多赘述.我主要用HAL库实现串口通讯,看一下配置Uart的结构一变量 这里使用了结构体嵌套 typedef struct {   USART_TypeDef   ...

  3. STM32F407霸天虎HAL库CubeMX学习笔记——DS18B20

    STM32F407霸天虎HAL库CubeMX学习笔记--DS18B20 一.软件准备 二.硬件准备 三.CubeMX配置 四.Keil printf重写 tim.c DS18B20.h DS18B20 ...

  4. 【Python-pywt】 小波变化库—Pywavelets 学习笔记

    (转载) [Python ]小波变化库--Pywavelets 学习笔记_nanbei2463776506的博客-CSDN博客 https://blog.csdn.net/nanbei24637765 ...

  5. 《C++标准库》学习笔记 — STL —流

    <C++标准库>学习笔记 - STL -流 一.操控器 1.原理 2.自定义操控器 3.控制输入的宽度 二.自定义 I/O 操作符 1.重载输出操作符 2.输入操作符 三.自定义格式化标志 ...

  6. Lib库使用学习笔记

    Lib库使用学习笔记 转自:http://blog.csdn.net/macky0668/article/details/6044867 技术前沿 2008-03-31 14:21:10 阅读177  ...

  7. 线性代数库 Armadillo 学习笔记

    线性代数库 Armadillo 学习笔记 项目环境 Xcode 项目配置 前置代码 矩阵基本操作 全零矩阵 全一矩阵 对角矩阵 打印一个矩阵 修改获取矩阵元素 获取某行某列 获取对角向量 转置矩阵 逆 ...

  8. 点云库PCL学习笔记 -- 点云滤波Filtering -- 3. StatisticalOutlierRemoval 统计滤波器

    点云库PCL学习笔记 -- 点云滤波Filtering -- 3.StatisticalOutlierRemoval 统计滤波器 StatisticalOutlierRemoval 统计滤波器相关简介 ...

  9. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

最新文章

  1. Python函数之计算规则图形的面积
  2. python中pos的用法_Python正则式的基本用法
  3. 快速入门脑机接口:BCI基础(二)
  4. spoj BCEASY - Bottom Coder (Easy)
  5. 记录一下LabelImg实际绘制框颜色的位置
  6. 【深度学习】图片分类CNN模板
  7. java+web+415_使用json返回HTTP状态415的Web服务 - 不支持的媒体类型
  8. [Java基础]字符缓冲流
  9. Java命令行界面(第14部分):google-options
  10. spring mvc学习(3):建立第一个动态web项目
  11. 项目启动居然如此重要!
  12. 计算机网络中的数据链路层
  13. vtigerCrm 目录结构(整理中)
  14. QTP 自动化测试--定义变量
  15. 应对大数据分析的几个方法
  16. Centos6.x升级内核方法支持Docker
  17. 《张居正》—— 读后总结
  18. phpstorm 设置注释
  19. 2021计算机视觉-包揽所有前沿论文源码 -上半年
  20. IDEA 如果修改工作区的主题 也就是黑色背景和白色背景

热门文章

  1. SharePoint 2010的数据库服务器实例默认为sqlserver2
  2. WebResponse 跨域访问
  3. 大数据在智慧社区的作用有哪些
  4. 物联网卡云平台如何分析信息数据
  5. 用python输出200以内的素数_Python练习题 008:打印101-200之间的所有素数
  6. 基于状态空间模型的控制器设计
  7. Python爬虫之(三)urllib库
  8. 推荐 | 微软SAR近邻协同过滤算法解析(一)
  9. 近邻模块︱apple.Turicreate中相似判定Nearest Neighbors(四)
  10. [机器学习]关联挖掘介绍