//需要在主函数头文件加上#include "pwm.h"
//在主函数中加上TIM3_PWM_init(u16 arr,u16 psc)初始化,参数在pwm.h中有解释
//执行舵机转动TIM_SetCompare1(TIM3,500) 参数在pwm.c最下方有解释
#include "pwm.h"
void TIM3_PWM_init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;//GPIO初始化
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//时钟初始化
TIM_OCInitTypeDef TIM_OCInitStructure;//定时器通道初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开GPIOA的时钟 (通道1、2)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开GPIOB的时钟 (通道3、4)
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//开TIM3的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//开复用AFIO的时钟
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7;//设置引脚PA6、PA7
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度
GPIO_Init(GPIOA,&GPIO_InitStructure);//GPIOA初始化
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;//设置引脚PB0、PB1
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度
GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIOB初始化
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//时钟分频因子,配置死区时间时需要用到
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_Period=arr; // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
TIM_TimeBaseStructure.TIM_Prescaler=psc;// 驱动CNT计数器的时钟 = Fck_int/(psc+1)
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//TIM初始化
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//配置为PWM模式1(不用改)
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//输出使能(不用改)
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出通道电平极性配置(不用改)
TIM_OC1Init(TIM3,&TIM_OCInitStructure);//TIM3的通道1初始化
TIM_OC2Init(TIM3,&TIM_OCInitStructure);//TIM3的通道2初始化
TIM_OC3Init(TIM3,&TIM_OCInitStructure);//TIM3的通道3初始化
TIM_OC4Init(TIM3,&TIM_OCInitStructure);//TIM3的通道4初始化
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIM3的通道1的预装载寄存器
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIM3的通道2的预装载寄存器
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIM3的通道3的预装载寄存器
TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIM3的通道4的预装载寄存器
TIM_Cmd(TIM3,ENABLE);//使能定时器3
// TIM_SetCompare1(TIM3,1500); //可设置TIM3通道1的初始值
// TIM_SetCompare2(TIM3,1500); //可设置TIM3通道2的初始值
// TIM_SetCompare3(TIM3,1500); //可设置TIM3通道3的初始值
// TIM_SetCompare4(TIM3,1500); //可设置TIM3通道4的初始值
// TIM_SetCompare1(TIM3,500); //设置通道1占空比 500/20000=0.5ms/20ms 对应0°
// 1000/20000=1.0ms/20ms 对应45°
// TIM_SetCompare2(TIM3,1500);//设置通道2占空比 1500/20000=1.5ms/20ms 对应90°
// 2000/20000=2.0ms/20ms 对应135°
// 2500/20000=2.5ms/20ms 对应180°
}

千里马02
- 粉丝: 5526
最新资源
- GSM移动通信网络的基本构成(doc17).docx
- Java类设计.ppt
- excel表格中你真的会复制吗.doc
- 2023年计算机考试知识点.doc
- 2022网站合作协议书.docx
- 2023年上半年软件设计师下午试题及答案.doc
- excel英文大小写转换函数用法及实例介绍.pdf
- Mcontroller-v7-FanciSwarm-机器人开发资源
- photoshopcs3怎么安装磨皮滤镜.doc
- 2023年C++实验报告MFC简单画图程序.doc
- java kotlin demo-Kotlin资源
- 2022项目管理工作流程.docx
- mcp-gitee-AI人工智能资源
- RFID智能机房资产管理系统软件技术方案.docx
- 操作系统要点提要.doc
- C语言期中考试试题及答案.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



评论2