PWM简单理解就是生成PWM方波,主要可控的参数有周期,占空比,极性。

stm32内置PWM生成器,我想应该是用TIM加比较器来实现的吧,那么如何实现stm32输出PWM波呢?

一、得知道那些IO可以输出PWM,貌似带TIM的都能直接输出,这个可以在数据手册中查到。

我收头的板子要产生两路+12V/-12V的PWM,我打算用TIM5的CH1和CH4两个通道生成PWM,所以一路接PA0一路接PA3。

二、软件上要配置IO、TIM及比较器。

1.配置IO,mode = AF ,注意一定要开启AF功能GPIO_PinAFConfig();

    GPIO_InitTypeDef     GPIO_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_PinAFConfig(PWM_1_PERIPH, GPIO_PinSource0, GPIO_AF_TIM5);
GPIO_PinAFConfig(PWM_1_PERIPH, GPIO_PinSource3, GPIO_AF_TIM5);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

2.配置TIM5参数,这里主要配置PWM的周期,这里其实配置的是TIM5的周期,也就意味着我的两路PWM是同频率的。这里主要使用到的是分频器Prescaler和倍频器Period两个寄存器,TIM5挂载在APB1上,即PCLK1的频率通过分频与倍频得到想要的PWM周期。

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 30000; //周期T=1/30M*30000=1ms
TIM_TimeBaseStructure.TIM_Prescaler = 0; //1+0=1分频 所以频率=30M/1=30M
TIM_TimeBaseStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);

3.配置极性,占空比之类的参数。注意一定要初始化响应的通道,通道1就是TIM_OC1Init();通道4就是TIM_OC4Init();

    TIM_OCInitTypeDef  TIM_OCInitStructure;

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_Pulse = 3*percent;//占空比=3*percent/30000=percent/10000=(10000-Charger_Config_Infor.u16_CP_PWM)/10000
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出极性:TIM输出比较极性低
TIM_OC1Init(TIM5, &TIM_OCInitStructure);//初始化外设TIMx_CHx
TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);//使能TIMx在CCR2上的预装载寄存器
TIM_ARRPreloadConfig(TIM5, ENABLE);//使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM5, ENABLE);//使能TIMx外设

【stm32】的PWM外设|学习笔记的更多相关文章

  1. STM32 + RT Thread OS 学习笔记[四]

    1.  补注 a)      硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,M ...

  2. STM32 + RT Thread OS 学习笔记[三]

    RTGUI 据说RTGUI是多线程的,因此与RT-Thread OS的耦合度较高,有可能要访问RT-Thread的线程控制块.如果要移植到其它OS,估计难度较大.目前还处于Alpha状态,最终将会包含 ...

  3. STM32 + RT Thread OS 学习笔记[二]

    串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1.   目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...

  4. stm32寄存器版学习笔记05 PWM

    STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...

  5. STM32学习笔记之一(初窥STM32)

    怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个 ...

  6. STM32学习笔记(一)——点亮一个LED

    引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...

  7. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  8. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  9. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

  10. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

随机推荐

  1. ABAP 写入批次特征值以及更新批次特征值

    需求 SAP启用了批次,需要在特征值中写入物料类型,区分该物料批次是用于研发的亦或是量产的,关于研发和量产标识我是坐在采购订单行项目增强中了,这里就不多赘述了,参考https://www.cnblog ...

  2. LINQ中AsQueryable()和AsEnumerable()区别

    在进行EF数据查询时,AsEnumerable()会直接生成将LINQ语句生成sql脚本并到数据库中执行,并将结果加载到内存中,后续操作都是操作内存中的对象: AsQueryable()则可继续进行L ...

  3. Nacos服务管理

    注:基于SpringBoot项目 一.服务注册 1. 依赖引入 # 首先父工程中引入 SpringCloudAlibaba 版本管理依赖,其中会包含 nacos 的版本 <!-- SpringC ...

  4. SAP BW/4HANA学习笔记2

    2.Data Modeling BW/4HANA Data Modeling简介 Data Quality:数据质量问题: silos(桶仓):大量重复冗余的主数据,独立计算统计: 数据silos缺点 ...

  5. git -----已经被跟踪文件如何在本地提交时忽略

    git update-index --assume-unchanged C.md 注:忽略后将不再拉取和提交c.md这个文件 git update-index --no-assume-unchange ...

  6. Linux Qt编译时出现has modification time int the future的解决方法

    问题场景:我在window系统上合并完代码后,将代码通过TF卡拖到了Debian系统的开发板子上(为什么我不用Winscp或者xhttp传呢?因为网线被同事拿走了...),然后就报这个错. 网上查阅资 ...

  7. 数据库链接失败错误ERROR com.alibaba.druid.pool.DruidDataSource - {dataSource-1} init error解决

    用java -jar启动之后,只要一访问数据库就报错,错误信息如下: 文字如下: 2019-07-02 10:25:12.220 ---> [http-nio-8080-exec-1] ---& ...

  8. 问题:为啥explain 后type=all

    最近在学习mysql 调优,学习explain执行计划,为了模拟出type=system或const,我创建了一张表test(id,name),id为主键,里面放了一条数据 执行 EXPLAIN SE ...

  9. win10 + emacs + sml

    1.官网下载sml编译器是smi安装包,安装结束之后把bin文件夹放到环境变量Path中 2.下载emacs压缩包,直接解压 3.emacs中alt+x,输入package-list 然后选择sml- ...

  10. js match方法

    1.用法 match()方法可以字符串中检索指定的值,或者是匹配一个或多个正则表达式 2.返回值 该方法类似于indexOf()/lastIndexOf(),区别就是返回值不一样 indexOf()/ ...