完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 基础定时器的应用
1.1 基础定时器TIM6的应用 实现功能: 基础定时器TIM6间隔500ms中断一次; 1.1.1 TIM6的参数配置 定时时间计算: 所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 7200 /5000 = 2Hz; 定时时间T = 1 / f 则: 1s / 2Hz = 1000 000us / 2Hz = 500 000us =500ms。 1.1.2 TIM6的NVIC配置 1.1.3 生成代码 在main函数中开启基础定时器TIM6的中断HAL_TIM_Base_Start_IT(&htim6); int main(void) { HAL_TIM_Base_Start_IT(&htim6); while (1){} } 在tim.c文件中实现中断回调函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim == &htim6) { HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5); } } 1.1.4 实现现象 将PE5接到逻辑分析仪,注意前提是已经将PE5初始化为输出,由图可以看出中断周期为500ms 2 高级定时器的应用 2.1 STM32CubeMX中参数分析 2.1.1 Slave Mode External Clock Mode 1 :参考 13.3.4 时钟选择 章 Reset Mode、Gated Mode、Trigger Mode:参考13.4.3 TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR) 和 14.3.14 定时器和外部触发的同步 章 2.1.2 Trigger Output(TRGO)Parameters 该部分内容实现定时器同步,参考内容如下: 13.4.3 TIM1 和TIM8 从模式控制寄存器(TIMx_SMCR) 章的 MSM 13.4.2 TIM1 和TIM8 控制寄存器 2(TIMx_CR2) 章的 MMS[2:0] 14.3.15 定时器同步 章 2.1.3 定时器输出引脚选择 可作为输出的引脚选择,参考 8.3.7 定时器复用功能重映射 章 使用STM32CubeMX选择输出引脚有两种方式,选择默认引脚和选择指定引脚 例如使用高级定时器TIM1通道1输出PWM 1、选择默认引脚 2、选择指定引脚 根据 8.3.7 定时器复用功能重映射 找出可用的引脚,如下图 可作为TIM1_CH1的引脚有PA8和PE9,这里指定PA8作为TIM1_CH1输出PWM 则先在Pinout view 中将PA8选中作为TIM1_CH1 再按如下操作 2.2 PWM互补输出实验 实现功能:TIM1的通道1输出互补PWM,带死区时间,带刹车引脚 2.2.1 CubeMX中TIM1的MODE配置 2.2.2 CubeMX中TIM1的输出引脚配置 2.2.3 CubeMX中TIM1的参数配置 其余的参数请参考:《STM32中文参考手册_V10》《零死角玩转STM32—F103霸道》 PWM的频率及周期计算: 芯片的时钟为72MHz;Prescaler为7200;Period为200;且计数方式为向上计数 频率:f = 72M / Prescaler / Period = 72000 000 / 7200 /200 = 50Hz; 周期:T = 1 / f 则: 1s / 50Hz = 1000 000us / 50Hz = 20 000us =20ms。 如果计数方式为中央计数: f = 72M / Prescaler / Period / 2 = 25Hz;T = 40ms 占空比的计算,Period为200;Pulse为100。所以占空比为50% 死区时间计算: 参考 13.4.18 TIM1 和TIM8 刹车和死区寄存器(TIMx_BDTR) 章的 DTG[7:0] 13.4.1 TIM1 和TIM8 控制寄存器 1(TIMx_CR1) 章的 CKD[1:0] 2.2.4 工程的程序修改 在 main 函数中 MX_TIM1_Init 初始化之后开启CH1和CH1N的PWM输出 HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); /*开启CH1的PWM输出*/ HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1); /*开启CH1N的PWM输出*/ 2.2.5 实验现象 从逻辑分析仪中可以看出,输出频率为50Hz,周期为20ms,占空比为50%。 将PWM放大可以看到存在死区时间 刹车现象 3 通用定时器的应用 3.1 通用定时器TIM3输出PWM 3.1.1 基础参数的配置 定时周期计算: 所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 7200 /200 = 50Hz; 定时时间T = 1 / f 则: 1s / 50Hz = 1000 000us / 50Hz = 20 000us =20ms。 3.1.2 生成代码 1、开启通道1的PWM int main(void) { 。.. /*系统其他的初始化*/ MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/ while (1) { } } 产生的PWM 定时器TIM3的通道映射: 2、调节PWM的占空比 自定义函数,调节参数可以调节占空比,注意参数范围是0 ~ Counter Period 。 void TIM_SetTIM3Compare1(uint32_t compare) { TIM3-》CCR1=compare; } int main(void) { 。.. /*系统其他的初始化*/ MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); /*开启通道1的PWM*/ TIM_SetTIM3Compare1(20); while (1) { } } 产生的占空比 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 04:49 , Processed in 0.994158 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号