历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | STM32F429HAL库定时器学习笔记

2018-12-29 来源:eefocus

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


 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)

 


推荐阅读

史海拾趣

德力西(DELIXI)公司的发展小趣事

1984年,胡成中偕其弟胡成国等人在浙江省乐清市创立了“乐清县求精开关厂”,这便是德力西的前身。当时,企业仅有3位股东,5万元的资本,8名员工,以及单一的热继电器产品。凭借“以质取胜”的经营理念和灵活的机制,德力西在温州市电器行业中逐渐崭露头角。

GREEGOO公司的发展小趣事
通过调整时钟信号的延迟来修正时序偏差,使时钟信号与数据采样时刻精确匹配。
Concurrent Logic公司的发展小趣事

在取得初步成功后,Concurrent Logic开始扩展其产品线。他们不仅开发了多款针对不同应用场景的并行处理芯片,还进军了与并行计算紧密相关的其他硬件领域,如高性能的服务器和存储设备。这些新产品的研发和上市,进一步增强了公司在市场上的竞争力。

E-tec Interconnect Ltd公司的发展小趣事

在电子行业快速发展的背景下,E-tec始终保持对技术创新的关注。他们投入大量资金进行研发,不断推出新产品和新技术。例如,他们成功开发了一种新型的微型连接器,该连接器具有体积小、传输速度快、抗干扰能力强等优点,受到了市场的热烈欢迎。此外,E-tec还注重产品升级和换代,确保产品始终保持在行业前列。

贝特莱公司的发展小趣事

深圳贝特莱电子科技股份有限公司成立于2011年7月,从一开始,公司就明确了以技术研发为核心的发展战略。依托专业团队多年的行业资源积累,贝特莱致力于开发具有自主知识产权的核心技术。在指纹识别、触控、生命感知及MCU等芯片领域,贝特莱不断取得突破,为后续的市场拓展奠定了坚实的基础。

ARCOL公司的发展小趣事

品质是ARCOL公司的核心竞争力。公司始终坚持以质量为核心,建立了严格的质量管理体系。从原材料的采购到产品的出厂,每一个环节都经过严格把关,确保产品的质量和性能达到最高标准。同时,ARCOL还注重品牌建设,通过不断提升产品质量和服务水平,树立了良好的企业形象和口碑。

问答坊 | AI 解惑

电信技术名词解释:EDGE技术详解

EDGE是英文Enhanced Data Rate for GSM Evolution 的缩写,即增强型数据速率GSM演进技术。EDGE是一种从GSM到3G的过渡技术,它主要是在GSM系统中采用了一种新的调制方法,即最先进的多时隙操作和8PSK调制技术。由于8PSK可将现有GSM网络采用的GMSK调 ...…

查看全部问答>

anything for copies

Creating the works from public domain print editions means that no one owns a United States copyright in these works, so the Foundation (and you!) can copy and distribute it in the United States without permission and without payi ...…

查看全部问答>

步进电机终于有点小收获了~~~~

步进电机终于转动起来了!!!!真是意想不到 只是转动的力度非常的小,带不动纸 ,需要调节motor的频率?还是调节什么呢?就是让它转动的力度大些 wow~~~~~~~~~·…

查看全部问答>

请问芯片方案代理(卖开发板的),他们做了哪些工作?

很多芯片原厂(ARM9/ARM11)的运营方式不一样. 有些工作是原厂做的,有些是芯片方案商(卖开发板的)做的. 如:三星(ARM9/ARM11)方案,有些工作是三星原厂做的,有些是代理(卖开发板的,如:友坚科技)做的. 请问芯片方案代理(卖开发板的),他们做了哪 ...…

查看全部问答>

单片机开发经历

ARM单片机的抗干扰能力那么差呢?请那位指叫呢?STM32芯片呢?…

查看全部问答>

关于WDM和Directshow的结合开发,100分重谢!

    小弟目前已经开发完saa7130在windows下的驱动,现在准备将其写成硕士论文,前不久交了初稿,被导师痛批,道:没有丝豪创新点!郁闷之至,遂前往eeworld来寻求慰藉。请问各位大侠,能不能将directshow的部分小功能整合到WDM驱动中实现 ...…

查看全部问答>

TO USB驱动开发的例程问题

本人使用Cy7c68013A进行开发,其它例程都已经完成,控制传输找资料已经完成. 只是剩下   DriverObject->MajorFunction[IRP_MJ_WRITE] = Ezusb_Write;   //写入数据    DriverObject->MajorFunction[IRP_MJ_READ] = E ...…

查看全部问答>

Go Main

我使用的是2407 用汇编写程序时,调试 远行一切正常 当使用C时,发现load 后能进入_cint0,但点go main 程序就会跑飞(不能执行 call main那行 ) 请问这会是由什么原因引起的?…

查看全部问答>

【讨论】这是一个应该出现的问题吗?

在对f1132的p1.0,p1.1进行中断处理时发现! (p1.0 和 p1.1的中断是互锁的,既: 同一时间只允许一个io中断) 即使不允许p1.0中断(P1IE = BIT1;),p1IFG.0 也会变成1,这样就给中断处理程序带来了识别的困难! 大家有没有遇到同样的问题!!! ...…

查看全部问答>

转售一些剩余芯片以及板子。

芯片的价格都是按照淘包成交价的一半左右来定的。有些没有明确交易,如果你想要,并且你有明确交易价格。就按照半价来出。 话不多说,上清单。 洞洞板   5x7CM 10块  7X12CM 8块    10元 MAX6033AA   & ...…

查看全部问答>