【stm32】的PWM外设|学习笔记
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外设|学习笔记的更多相关文章
- STM32 + RT Thread OS 学习笔记[四]
1. 补注 a) 硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,M ...
- STM32 + RT Thread OS 学习笔记[三]
RTGUI 据说RTGUI是多线程的,因此与RT-Thread OS的耦合度较高,有可能要访问RT-Thread的线程控制块.如果要移植到其它OS,估计难度较大.目前还处于Alpha状态,最终将会包含 ...
- STM32 + RT Thread OS 学习笔记[二]
串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1. 目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...
- stm32寄存器版学习笔记05 PWM
STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...
- STM32学习笔记之一(初窥STM32)
怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个 ...
- STM32学习笔记(一)——点亮一个LED
引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...
- stm32寄存器版学习笔记07 ADC
STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...
- stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)
STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
随机推荐
- LinkedList的线程安全解决办法
方法一:List<String> list = Collections.synchronizedList(new LinkedList<String>()); 方法二:将Lin ...
- js区分图片加载中和加载完成状态
var _ent = document.getElementById("test"); if (_ent.complete) { //图片已经加载完成 _ent.stop(); } ...
- go环境 依赖管理 基本命令
Go安装 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ Windows 选择Windows版本下载安 ...
- docker 安装 服务
服务所需 mysql,redis,nfs,rsync,nginx,以及自己的后端服务 mysql docker run --restart=always -d -v /etc/localtime:/e ...
- "人生重开模拟器",10分钟轻松搭建!
人生重开模拟器是最近爆火的一款非常好玩的模拟游戏,会带你走入一个有趣的世界,开启全新的人生旅程,即"人生重开". 然而实际上,这款游戏短短在3天内上线,在百度贴吧.朋友圈.QQ群. ...
- js截取数组
在JavaScript中,可以使用 slice() 方法来截取数组的一部分.该方法接受两个参数,第一个参数是截取的起始位置(包括该位置),第二个参数是截取的结束位置(不包括该位置). 例如,假设有一个 ...
- Redis哨兵模式+缓存穿透、击穿和雪崩
一.哨兵模式概述(自动选主机的方式)主从切换技术:当主机宕机后,需要手动把一台从(slave)服务器切换为主服务器,这就需要人工干预,费时费力,还回造成一段时间内服务不可用,所以推荐哨兵架构(Sent ...
- 文件监控利器-Jnotify
监听的文件变化的方式有很多,但是比较完美的还是jNotify https://jnotify.sourceforge.net/ 对比一下监控方式的优缺点 方式 缺点 java原生watch 可能对文件 ...
- Libusb测试USB device(2)
因为测试的比较混乱,我就按照我的问题导向来描述我的过程吧 一. 提示libusb_context对象为NULL的错误: 在简化的过程中,我没有加入dev_handler判断为空就进行了具体的工作: 1 ...
- react native 布局问题
1. Text组件里面的 文字垂直居中 <Text style={styles.confirmButtonStyle}>确认</Text> confirmButtonStyle ...