历史上的今天
今天是: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)
史海拾趣
|
EDGE是英文Enhanced Data Rate for GSM Evolution 的缩写,即增强型数据速率GSM演进技术。EDGE是一种从GSM到3G的过渡技术,它主要是在GSM系统中采用了一种新的调制方法,即最先进的多时隙操作和8PSK调制技术。由于8PSK可将现有GSM网络采用的GMSK调 ...… 查看全部问答> |
|
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)方案,有些工作是三星原厂做的,有些是代理(卖开发板的,如:友坚科技)做的. 请问芯片方案代理(卖开发板的),他们做了哪 ...… 查看全部问答> |
|
小弟目前已经开发完saa7130在windows下的驱动,现在准备将其写成硕士论文,前不久交了初稿,被导师痛批,道:没有丝豪创新点!郁闷之至,遂前往eeworld来寻求慰藉。请问各位大侠,能不能将directshow的部分小功能整合到WDM驱动中实现 ...… 查看全部问答> |
|
本人使用Cy7c68013A进行开发,其它例程都已经完成,控制传输找资料已经完成. 只是剩下 DriverObject->MajorFunction[IRP_MJ_WRITE] = Ezusb_Write; //写入数据 DriverObject->MajorFunction[IRP_MJ_READ] = E ...… 查看全部问答> |
|
在对f1132的p1.0,p1.1进行中断处理时发现! (p1.0 和 p1.1的中断是互锁的,既: 同一时间只允许一个io中断) 即使不允许p1.0中断(P1IE = BIT1;),p1IFG.0 也会变成1,这样就给中断处理程序带来了识别的困难! 大家有没有遇到同样的问题!!! ...… 查看全部问答> |
|
芯片的价格都是按照淘包成交价的一半左右来定的。有些没有明确交易,如果你想要,并且你有明确交易价格。就按照半价来出。 话不多说,上清单。 洞洞板 5x7CM 10块 7X12CM 8块 10元 MAX6033AA & ...… 查看全部问答> |




