完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这些基础的东西看视频很费时间而且有过基础的在学习只是库不太清楚,希望我总结的库使用的一些使用能节约一点大家的时间。 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 }12345678910HAL库的特点就是有很多结构体嵌套这样一个句柄就可以配置所有的函数非常方便。 就在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,子优先级3HAL_NVIC_EnableIRQ(TIM3_IRQn); //开启ITM3中断 }}123456789//定时器3中断服务函数 void TIM3_IRQHandler(void){ HAL_TIM_IRQHandler(&TIM3_Handler);}1234回调函数,定时器中断服务函数调用 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ if(htim==(&TIM3_Handler)) { LED1=!LED1; //LED1反转 }}1234567理解了我们就看通用定时器很常用的两个功能 (我一般就是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);}123456789101112131415161718192021222324252627282930313233void 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();//配置定时器四开启 }} |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1606 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1538 浏览 1 评论
969 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1584 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
642浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
514浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
502浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 04:39 , Processed in 0.690784 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号