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. ThreadLocal及常用场景

    ThreadLocal ThreadLocal是Java中的为解决多线程间数据隔离的解决方案,其底层依赖于Java的内存模型,依赖于当前执行线程的内存来完成对数据的存取操作. 一般在使用时,在对象中创 ...

  2. navigator跳转

    navigator跳转  open-tab="switchTab"/open-type="navigate" <navigator url="/ ...

  3. Docker中使用Nginx镜像配置HTTPS和HTTP强制使用HTTPS访问(4)

    一.前言 上一文章当中说了Docker-Compose管理镜像和容器,本文章介绍使用Docker中Nginx镜像,使用的工具和ubuntu版本在ASP.NET CORE部署在Docker容器中已详细说 ...

  4. Redis入门级简单安装使用

      最近突然就想学一下Redis,于是就各种找教程,前两天实际操作了一下,也不是想象中的很难 但是今天想写一个使用Redis的demo,突然就不会使用Redis了,在网上也是查找了半天,还是想起来了点 ...

  5. Windows 下安装 Bun:像 Node 或 Deno 一样的现代 JavaScript 运行时

    背景 最近前端工具链又火了一个项目 Bun,可以说内卷非常严重.Bun 是一个新的 JavaScript 运行时,内置了打包器.转译器.任务运行器和 npm 客户端. Bun 是像 Node 或 De ...

  6. 用浏览器打开pdf格式的文件默认全屏显示

    打开地址如 http://xxxxx.pdf 在文件地址后面添加#view=FitH,top,可实现全屏查看pdf文件. http://xxxxx.pdf#view=FitH,top,

  7. 真的,Web安全入门看这个就够了!

    一.HTTP协议 1.HTTP 什么是HTTP? 超文本传输协议,HTTP是基于B/S架构进行通信的,而HTTP的服务器端实现程序有httpd.nginx等,其客户端的实现程序主要是Web浏览器,例如 ...

  8. git基础代码获取

    1.新建文件夹 2.使用命令git init 初始化 3.见你与远程厂库的连接,git remote add origin 远程仓库地址 4.将远程仓库代码拉去到本地,git fetch origin ...

  9. 初学银河麒麟linux笔记 第六章 发布qt程序

    本章参考了@长沙红胖子Qt 的笔记 https://blog.51cto.com/hongpangzi/5788384 这里纪录一下步骤 linux上的QT程序已经能正常编译运行,这里需要进行发布. ...

  10. Could not match supplied host pattern, ignoring: 192.168.0.101

    [root@ansible ansible]# ansible 192.168.0.101 -m ping[WARNING]: Could not match supplied host patter ...