找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2149|回复: 3
打印 上一主题 下一主题
收起左侧

STM32 PWM控制舵机源程序

[复制链接]
跳转到指定楼层
楼主
ID:980708 发表于 2021-11-13 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
main.c

#include <stm32f10x.h>
#include "led.h"
#include "pwm.h"
#include "delay.h"
#include "usart.h"        
#include "sys.h"
int main(void)
{
        SysTick_Init(72);
  PWM_TIM3_CH1_Init(19999,71);
//        PWM_TIM3_CH2_Init(19999,71);
        uart_init(9600);
        LED_Init();
        while(1)
        {


//                //改变占空比值
                TIM_SetCompare1(TIM3,2500);//1500/20000=1.5/20
                delay_ms(1200);
                delay_ms(1200);
                TIM_SetCompare1(TIM3,1000);//1000/20000=1/20

                delay_ms(1200);
                delay_ms(1200);
        }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

pwm.c

#include "pwm.h"


void PWM_TIM3_CH1_Init(u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_OCInitTypeDef TimOCInitStructure;
        
        //1,开启 TIM4 GPIOB 复用时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
        
        //2,初始化PB7,复用功能
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                        //选择引脚7                                         
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //输出频率最大50MHz                     
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                //复用推挽输出
        GPIO_Init(GPIOA,&GPIO_InitStructure);
               
        //3,初始化TIM4
        TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置定时器的分频值:1MHZ
        TIM_TimeBaseStructure.TIM_Period = arr;        //设置计数溢出大小 周期为500us
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //设置计数器模式为向上计数模式(+1)        
        TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;                //分频因子
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);        
                        
        //4,初始化PWM输出配置,TIM4的CH2
        TimOCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//PWM模式1输出
        //TimOCInitStructure.TIM_Pulse = 0;                //设置比较寄存中的初值(占空比)
        TimOCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//TIM输出比较极性高
        TimOCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//使能输出状态
        TIM_OC1Init(TIM3, &TimOCInitStructure);
        //TIM_OC2Init(TIM3, &TimOCInitStructure);
        //5,使能TIM4预装载寄存器
        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
        //TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
        //6,使能自动重装载        
        //TIM_ARRPreloadConfig(TIM4,ENABLE);
        
        //7,使能TIM4的PWM输出
        //TIM_CtrlPWMOutputs(TIM4,ENABLE);
        
        //8,开启TIM4定时器
        TIM_Cmd(TIM3, ENABLE);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
pwm.h

#ifndef __PWM_H
#define __PWM_H

#include <stm32f10x.h>


void PWM_TIM3_CH1_Init(u16 arr,u16 psc);


#endif


水平不足,仅供参考: PWM1程序.7z (177.4 KB, 下载次数: 62)

评分

参与人数 1黑币 +20 收起 理由
admin + 20

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:973696 发表于 2021-11-17 17:09 | 只看该作者
你的pwm.c文件开头不用引用#include <stm32f10x.h>都可以么,为什么我会报错呢,还有你这个函数 SysTick_Init(72)是库函数自带的么?还是自己写的函数#include "sys.h"
回复

使用道具 举报

板凳
ID:980708 发表于 2021-12-20 09:43 | 只看该作者
dll001 发表于 2021-11-17 17:09
你的pwm.c文件开头不用引用#include 都可以么,为什么我会报错呢,还有你这个函数 SysTick_Init(72)是库函 ...

pwm.h有引用#include <stm32f10x.h>,这个 SysTick_Init(72)你可以用这个SystemInit();
回复

使用道具 举报

地板
ID:980708 发表于 2021-12-20 09:45 | 只看该作者
dll001 发表于 2021-11-17 17:09
你的pwm.c文件开头不用引用#include 都可以么,为什么我会报错呢,还有你这个函数 SysTick_Init(72)是库函 ...

pwm.h有引用#include <stm32f10x.h>,这个函数 SysTick_Init(72)你可以用库函数自带的这个SystemInit()。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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