历史上的今天
返回首页

历史上的今天

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

2018年12月29日 | STM32 HAL库 定时中断和编码输入

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中断通道 



  //ARPE使能 

TIM4->CNT=0;

    //TIM4->CNT = 0;

 //   __HAL_RCC_TIM4_CLK_ENABLE();//配置定时器四开启 

}

}


推荐阅读

史海拾趣

Display Elektronik GmbH公司的发展小趣事

面对数字化浪潮的冲击,Display Elektronik GmbH积极拥抱数字化转型。公司利用大数据、云计算等先进技术,实现了生产、销售、服务等各个环节的数字化管理。这种数字化转型不仅提高了公司的运营效率和管理水平,还为客户提供了更加便捷、高效的服务体验。在数字化转型的推动下,Display Elektronik GmbH的竞争力得到了显著提升。

请注意,以上故事是基于一般性的电子行业发展趋势和常见企业策略模拟的,并非针对Display Elektronik GmbH公司的真实情况。

Cyrustek公司的发展小趣事

随着全球化的不断推进,Cyrustek公司也积极实施全球化战略。通过与国际知名企业的合作和技术交流,Cyrustek不断引进先进的技术和管理经验,提升自身的核心竞争力。同时,Cyrustek还积极开拓国际市场,将产品销往全球各地。这种全球化战略不仅帮助Cyrustek扩大了市场份额,也提高了其品牌知名度和影响力。

Global Communications公司的发展小趣事
由于环境温度的频繁变化可能导致电路中的元件参数发生变化,从而影响补偿电路的稳定性和准确性。因此,在电路设计中需要选择稳定性好的元件,并采取适当的保护措施来确保电路的稳定性。
福斯特半导体(Foster)公司的发展小趣事
温度传感器的输出与温度之间的线性关系也很重要,因为这直接影响到补偿电路的准确性和稳定性。
BITECH公司的发展小趣事
由于环境温度的频繁变化可能导致电路中的元件参数发生变化,从而影响补偿电路的稳定性和准确性。因此,在电路设计中需要选择稳定性好的元件,并采取适当的保护措施来确保电路的稳定性。
Crystek公司的发展小趣事

尽管Crystek公司在发展过程中取得了显著的成就,但也面临着一些挑战和困难。例如,随着行业竞争的加剧和市场需求的不断变化,公司需要不断调整战略方向和产品结构以适应市场的变化。同时,公司还需要加强人才培养和团队建设,提升员工的技能水平和创新能力。然而,Crystek公司始终保持着积极进取的态度和勇于面对挑战的精神,相信在未来的发展中,公司将继续保持领先地位并创造更加辉煌的业绩。

这五个故事展示了Crystek公司在电子行业中的发展历程和取得的成就。从创业起步到技术创新、市场拓展、部门专业化以及应对挑战和未来发展,Crystek公司始终保持着积极进取的精神和不断创新的态度,为电子行业的发展做出了重要贡献。

问答坊 | AI 解惑

dxp sp2 中为什么在禁止布线层画边框范围时总是自己跳层

protel dxp sp2 中为什么在禁止布线层画边框范围时总是自己跳层??只要一开始画边框他就会自己跳到布线层,愁死了,新装的dxp sp2 :\'( 第一次碰到这种情况,郁闷啊,大家帮帮忙!!…

查看全部问答>

Pretous中LPC2138 P1口接1602液晶 仿真无法显示!!

本人在搭个Proteus中的虚拟仿真平台,用到LM1602时,无法正常显示发送的数据,相同的代码本人在LPC2106的P0口中曾成功过,因为外接部件多所以选用了LPC2138的P1,单步调试时写操作数都是正确的但是数据写入到IOSET1中就是无法显示;本人最怕在仿真 ...…

查看全部问答>

层被琐后Blt返回DDERR_SURFACEBUSY是由谁返回的?

请问执行Blt时有没有锁?如果有,加在哪里?跟到HalBlt里面没有加锁。层被琐时执行Blt操作直接返回DDERR_SURFACEBUSY,没有进HalBlt操作,错误码是由谁返回的?Blt和BltFast跟到底层都是执行的HalBlt,他们对硬件的依赖代码是否封在directDraw里面?…

查看全部问答>

?以前没做过嵌入式开发,现两家公司招聘被录用,一家做手机,一家做电视? 哪家更好些?

?以前没做过嵌入式开发,现两家公司招聘被录用,一家做手机,一家做电视? 哪家更好些? 因为两家公司实力相当,我没有办法比较。 以前做研发只用vc开发过项目,对嵌入式并不了解。 所以,想问问各位: 做软件, 开发手机和开发电视 ,哪个前 ...…

查看全部问答>

打印机驱动中记录详细打印信息 那里错了?

OEMStartDoc(     SURFOBJ    *pso,     PWSTR       pwszDocName,     DWORD       dwJobId) {         TERSE(UNITEXT(\"OEMStartDoc ...…

查看全部问答>

vxsim仿真环境中可以添加组件么?如何配置vxworks

在vxsim仿真环境中用到 POSIX中的函数,如何包含INCLUDE_POSIX_SCHED,不选bsp建立的工程(downloadable)的工程是不是都不能选组件配置?有什么其他方法么?谢谢。 ps:问题得到解决怎么揭帖?…

查看全部问答>

Android 6410 移植 (转)

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 安装lunux环境 安装编译工具 下载Linux kernel 安装Android SDK 获得root file system 修改Linux kernel源码 配置Linux kernel 修改root file system 编译Linux kernel 下载 ...…

查看全部问答>

如何理解“一切都是文件”?分别从应用层和驱动层角度回答。

各位大虾帮忙,如何理解“一切都是文件”?分别从应用层和驱动层角度回答。…

查看全部问答>

做fpga开发板

有木有做fpga开发板的?做开发板有什么好处呢?…

查看全部问答>

【设计工具】文档介绍了使用ISE10.1进行某种功能的FPGA操作步骤

文档介绍了使用ISE10.1进行某种功能的FPGA操作步骤,包括从新建文档、综合、功能仿真、编译实现和插入IP核等步骤,讲解非常详细。 …

查看全部问答>