简介

pass

设置pwm脉冲

pass

参考代码

/*控制GPIO PB12/PB13/PB14/PB15电机MOTOR  TIM2_CH3/TIM2_CH4
*/
void MOTOR_GPIO_Config(void)
{       /*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启GPIOB的外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /*选择要控制的GPIOB引脚*/                                                              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;    /*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   /*设置引脚速率为50MHz */   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化GPIOB*/GPIO_Init(GPIOB, &GPIO_InitStructure);       /* 低电平    */GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_12 | GPIO_Pin_15);GPIO_SetBits(GPIOB, GPIO_Pin_13 | GPIO_Pin_14);GPIO_ResetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_15);
}/** 函数名:TIM2_GPIO_Config* 描述  :配置TIM2复用输出PWM时用到的I/O* 输入  :无* 输出  :无* 调用  :内部调用*/
static void TIM2_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/* TIM2 clock enable *///PCLK1经过2倍频后作为TIM2的时钟源等于72MHzRCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* GPIOA clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*GPIOA Configuration: TIM2 channel 3 and 4 as alternate function push-pull */GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;         // 复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);}/** 函数名:TIM2_Mode_Config* 描述  :配置TIM2输出的PWM信号的模式,如周期、极性、占空比* 输入  :无* 输出  :无* 调用  :内部调用*/
static void TIM2_Mode_Config(void)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;/* PWM信号电平跳变值 */
//  u16 CCR1_Val = 500;
//  u16 CCR2_Val = 800;u16 CCR3_Val = 500;u16 CCR4_Val = 800;//u16 PrescalerValue;
/* -----------------------------------------------------------------------TIM2 Configuration: generate 4 PWM signals with 4 different duty cycles:TIM3CLK = 72 MHz, Prescaler = 0x0, TIM3 counter clock = 72 MHzTIM3 ARR Register = 71999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)TIM3 Frequency = 1 KHz.CC1 update rate = TIM2 counter clock / CCR1_ValTIM3 Channelx duty cycle = (TIM2_CCRx/ TIM2_ARR)* 100 = x%----------------------------------------------------------------------- *//* Time base configuration */      TIM_TimeBaseStructure.TIM_Period = 1000 ;       //ARR 当定时器从0计数到999,即为1000次,为一个定时周期TIM_TimeBaseStructure.TIM_Prescaler = 0;     //设置预分频:不预分频,即为72MHzTIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);/* PWM2 Mode configuration: Channel3 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;     //配置为PWM模式1TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;   //比较输出使能TIM_OCInitStructure.TIM_Pulse = CCR3_Val;     //设置跳变值,当计数器计数到这个值时,电平发生跳变TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR1_Val时为高电平TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //使能通道3TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel4 */TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = CCR4_Val;      //设置通道2的电平跳变值,输出另外一个占空比的PWMTIM_OC4Init(TIM2, &TIM_OCInitStructure);      //使能通道4TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2, ENABLE);            // 使能TIM2重载寄存器ARR/* TIM2 enable counter */TIM_Cmd(TIM2, ENABLE);                   //使能定时器2
}void TIM2_PWM_Init(void)
{MOTOR_GPIO_Config();TIM2_GPIO_Config();TIM2_Mode_Config();
}int main()
{TIM2_PWM_Init();while(1){      TIM_SetCompare3(TIM2, 1000);TIM_SetCompare4(TIM2, 1000);}
}

STM32通过TB6612FNG模块驱动电机相关推荐

  1. 浅谈STM32的DMA模块的使用

    浅谈STM32的DMA模块的使用 转自:http://blog.ednchina.com/jack_chang/123085/message.aspx http://article.ednchina. ...

  2. 使用STM32的USB模块中后对USB缓冲区的认识

    最近在使用STM32的USB模块开发个项目,还以为挺简单,结果搞了快两天才把USB的包缓冲区的访问搞定,在此做个小总结吧. STM32的USB模块包缓冲区有512B,但是在STM32的参考手册中的存储 ...

  3. 基于STM32与GSM模块发送中英文短信

    基于STM32与GSM模块发送中英文短信 最近在做毕业设计有用到GSM模块进行短信报警,模块的功能比较多这里就不介绍了,一般的拨打电话都很简单就只需要一条指令即可,发送英文短信也很简单也只要几条命令也 ...

  4. 基于STM32的ESP8266模块控制多路继电器

    基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...

  5. 【STM32训练—WiFi模块】第一篇、STM32驱动ESP8266WiFi模块获取网络时间

    目录 第一部分.写在前面 1.硬件准备 2.相关的AT指令 3.参考博客 第二部分.电脑串口助手调试ESP8266模块获取网络时间 1.ESP8266获取时间的流程 2.具体实现步骤 第三部分.STM ...

  6. stm32与GPS模块的数据传输,最后把数据传回到电脑上

    stm32与GPS模块的数据传输,最后把数据传回到电脑上 准备工作 GPS(G28Z2FTTL)模块介绍 GPS数据类型及格式 代码部分 串口初始化部分 GPS部分代码 数据展示 准备工作 stm32 ...

  7. STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换)

    STM32使用GSM模块发送中英文短信(TEXT模式到PDU模式的转换) 目的是按下按键,短信发送 PDU转换网站 链接: PDU转换网站. 使用硬件: ··· 开发板:正点原子战舰V3 GSM模块: ...

  8. stm32利用TOFSense模块测距教程

    stm32利用TOFSense模块测距教程 TOFSense是什么 简单来讲,TOFSense就是一个激光测距模块,它前面那个小小的黑框框就是它测距的地方即发射激光的地方.它有两种通讯方式:串口和ca ...

  9. stm32通过wifi模块实现手机远程控制灯与舵机

    由于对wifi模块的控制需要,在网上找了许多资料,发现wifi模块通过单片机进行通讯的代码不多,也有一些存在着错误,于是便自己写了一个wifi控制舵机和灯的程序,记录下来 stm32通过wifi模块实 ...

最新文章

  1. 试图将驱动程序添加到存储区_Ubuntu 19.10IOS将捆绑NVIDIA驱动
  2. SQL Server 2012 sa 用户登录 18456 错误
  3. c语言十万以内超级素数,用C语言求素数的优化
  4. 软件调试学习笔记(七)—— 单步步入单步步过
  5. python定义距离_距离度量以及python实现(一)
  6. php用array_merge实现无限级分类
  7. js中的cookie使用和vue-cookie的使用
  8. 动态修改网页title
  9. C 语言实例 - 判断三边能否构成三角形
  10. Web加固linux,Linux系统下web服务器的加固
  11. 常用数据库的驱动程序加载和Url下载地址
  12. 企业手机装配线平衡改善研究
  13. 系统架构设计的十大原则
  14. qq红包裂变式引流?QQ群红包裂变吸粉引流
  15. Win11怎么以管理员身份运行?Win11以管理员身份运行的设置方法
  16. Latch的产生和避免
  17. ArcEngine 开发之ITopologicalOperator 处理奇葩问题解决
  18. 代码风格自动化(二)——husky + lint-staged
  19. 百家号自媒体如何提升文章质量,百家号怎么写好文章,百家号写文章技巧
  20. 语雀实现收藏网页的功能(借助印象笔记)

热门文章

  1. Dart中常量构造函数
  2. 网络常见状态码大全。收藏这一篇就够了(HTTP Status Code)
  3. 工资倒挂 你怎么看?工作三年薪资不如毕业生!
  4. 肝不好的人,这几种食物要多吃!
  5. 为云服务器(VPS)增加一个站点支持
  6. dedecms 对不起,你输入的参数有误修改
  7. [MySQL]-删库后恢复
  8. 液晶屏幕,OLED屏幕,反应时间计算,RT,ResponseTime,响应时间
  9. Excel保存文件不能直接打开,打开之后显示灰屏,从左上角的文件中,再找到要打开的文件才能打开?
  10. Oracle 查询临时表空间