发 帖  
[问答]

请教关于STM32定时器输出PWM的困惑

3731 STM32 定时器
2018-8-8 11:56:07   1 评论 分享淘帖 邀请回答 举报
1 条评论
  • 2018-8-11 22:23

    void TIM1_Config(void)        //TIM1初始化 {                                    GPIO_InitTypeDef GPIO_InitStructure;                 TIM_TimeBaseInitTypeDef        TIMTimeBase_InitStruct;         TIM_OCInitTypeDef TIM_OCInitStructure;                  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);                  /* GPIO 初始化*/         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出         GPIO_Init(GPIOA, &GPIO_InitStructure);                                  /* TIM1 初始化*/         TIMTimeBase_InitStruct.TIM_Period=399;        //自动重装值                 TIMTimeBase_InitStruct.TIM_Prescaler=3599;        //CK_CNT = CK_INT/(3599+1) = 20000hz                 TIMTimeBase_InitStruct.TIM_ClockDivision=0;        //时钟分频,设置死区时需要                 TIMTimeBase_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;        //向上计数         TIM_TimeBaseInit(TIM1,&TIMTimeBase_InitStruct);        //初始化TIM1                  /* CH1 初始化*/                 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;         TIM_OCInitStructure.TIM_Pulse = 0;        //匹配值                 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //输出比较极性高                 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;         TIM_OC1Init(TIM1,&TIM_OCInitStructure);                 TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);        //使能TIM1在CCR1上的预装载寄存器                  TIM1->BDTR |= 1<<15;        //OC和OCN使能,高级定时器需要设置                 TIM_ARRPreloadConfig(TIM1, ENABLE);        //使能TIM1在ARR上的预装载寄存器         TIM_Cmd(TIM1,ENABLE);        //使能TIM1外设         TIM_CtrlPWMOutputs(TIM1, ENABLE);  } void TIM2_Config(void)        //TIM2初始化 {         GPIO_InitTypeDef GPIO_InitStructure;                 TIM_TimeBaseInitTypeDef        TIMTimeBase_InitStruct;         TIM_OCInitTypeDef TIM_OCInitStructure;                  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);                  /* GPIO 初始化*/         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //复用推挽输出         GPIO_Init(GPIOA, &GPIO_InitStructure);                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;         GPIO_Init(GPIOA, &GPIO_InitStructure);                  /* TIM2 初始化*/          TIMTimeBase_InitStruct.TIM_Period=7199;        //自动重装值                 TIMTimeBase_InitStruct.TIM_Prescaler=0;        //CK_CNT = CK_INT/(0+1) = 72 000 000hz                 TIMTimeBase_InitStruct.TIM_ClockDivision=0;        //时钟分频,设置死区时需要                 TIMTimeBase_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;        //向上计数         TIM_TimeBaseInit(TIM2,&TIMTimeBase_InitStruct);        //初始化TIM2                  /* CH1 初始化*/                 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;         TIM_OCInitStructure.TIM_Pulse = 0;        //匹配值                 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //输出比较极性高                 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;         TIM_OC1Init(TIM2,&TIM_OCInitStructure);                 TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);        //使能TIM2在CCR1上的预装载寄存器         /* CH2 初始化*/         TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;         TIM_OCInitStructure.TIM_Pulse = 0;                 TIM_OC2Init(TIM2,&TIM_OCInitStructure);         TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);        //使能TIM2在CCR2上的预装载寄存器                          TIM_ARRPreloadConfig(TIM2, ENABLE);        //使能TIM2在ARR上的预装载寄存器         TIM_Cmd(TIM2,ENABLE);        //使能TIM2外设 } void Motor(int CCR1_Val,int CCR2_Val)        //电机pwm输出 {         TIM2->CCR1=CCR1_Val;         TIM2->CCR2=CCR2_Val; } void        Servo(int CCR1_Val)        //舵机pwm输出 {         TIM1->CCR1=CCR1_Val; }

1个回答
2018-8-10 12:11:07 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐 上一条 /5 下一条

快速回复 返回顶部 返回列表
-

威廉希尔官方网站 社区

HarmonyOS威廉希尔官方网站 社区

RISC-V MCU威廉希尔官方网站 社区

FPGA开发者威廉希尔官方网站 社区

KaihongOS威廉希尔官方网站 社区

-

OpenHarmony开源社区

OpenHarmony开源社区

-

嵌入式论坛

ARM威廉希尔官方网站 论坛

STM32/STM8威廉希尔官方网站 论坛

嵌入式威廉希尔官方网站 论坛

单片机/MCU论坛

RISC-V威廉希尔官方网站 论坛

瑞芯微Rockchip开发者社区

FPGA|CPLD|ASIC论坛

DSP论坛

-

电路图及DIY

电路设计论坛

DIY及创意

电子元器件论坛

专家问答

-

电源威廉希尔官方网站 论坛

电源威廉希尔官方网站 论坛

无线充电威廉希尔官方网站

-

综合威廉希尔官方网站 与应用

机器人论坛

USB论坛

电机控制

模拟威廉希尔官方网站

音视频威廉希尔官方网站

综合威廉希尔官方网站 交流

上位机软件(C/Python/Java等)

-

无线通信论坛

WIFI威廉希尔官方网站

蓝牙威廉希尔官方网站

天线|RF射频|微波|雷达威廉希尔官方网站

-

EDA设计论坛

PCB设计论坛

DigiPCBA论坛

Protel|AD|DXP论坛

PADS威廉希尔官方网站 论坛

Allegro论坛

multisim论坛

proteus论坛|仿真论坛

KiCad EDA 中文论坛

DFM|可制造性设计论坛

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量威廉希尔官方网站

传感威廉希尔官方网站

-

招聘/交友/外包/交易/杂谈

项目外包

供需及二手交易

工程师杂谈|交友

招聘|求职|工程师职场

-

官方社区

发烧友官方/活动

华秋商城

华秋电路