STM32的PWM设置4路相差90度的输出信号

发布者:自在逍遥最新更新时间:2019-04-27 来源: eefocus关键字:STM32  PWM设置  输出信号 手机看文章 扫描二维码
随时随地手机看文章

void TIM_Encoder_Config(u16 PPS)//设置编码器的4路相差90度的PWM信号

{

    double    temp = 4000;

    /* Time Base configuration */

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    TIM_OCInitTypeDef TIM_OCInitStructure;

    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;    

    temp = temp*72/PPS -1;

    TIM_TimeBaseStructure.TIM_Period = (u16)temp - 1; //总周期长度

    TIM_TimeBaseStructure.TIM_Prescaler = 124;     // TIMCLK    

    

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up ;

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;

    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

    

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;//输出比较模式

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;

    TIM_OCInitStructure.TIM_Pulse = 0;

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;

    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

    TIM_OC1Init(TIM4, &TIM_OCInitStructure);

    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);

    //TIM4_OC2模块设置(设置2通道相位)

    TIM_OCInitStructure.TIM_Pulse = (u16)(temp/2-1);//1/4总周期长度

    TIM_OC2Init(TIM4, &TIM_OCInitStructure);

    TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable);

    //TIM4_OC3模块设置(设置3通道相位)

    TIM_OCInitStructure.TIM_Pulse = (u16)(temp-1);//1/2总周期长度

    TIM_OC3Init(TIM4, &TIM_OCInitStructure);

    TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);

    //TIM4_OC4模块设置(设置4通道相位)

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出极性:TIM输出比较极性高

    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;

    TIM_OCInitStructure.TIM_Pulse = (u16)(temp/2-1);//3/4总周期长度

    TIM_OC4Init(TIM4, &TIM_OCInitStructure);

    TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);    

    //死区设置

    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;

    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;

    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;

    TIM_BDTRInitStructure.TIM_DeadTime = 70;  //这里调整死区大小0-0xff

    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable;

    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;

    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;

    TIM_BDTRConfig(TIM4, &TIM_BDTRInitStructure);

    

    /* TIM4 counter enable */

    TIM_Cmd(TIM4, ENABLE);

    /* TIM4 Main Output Enable */

    TIM_CtrlPWMOutputs(TIM4, ENABLE);

}

关键字:STM32  PWM设置  输出信号 引用地址:STM32的PWM设置4路相差90度的输出信号

上一篇:stm32ADC的DMA模式
下一篇:SCA100T STM32代码

推荐阅读最新更新时间:2024-11-16 19:53

STM32单片机的Usart2串口的调试方法
先是参考http://wenku.baidu.com/view/78f6b1350b4c2e3f572763e9.html调通了usart1 然后将程序进行修改,对Usart2进行配置,配置完了之后,程序还是没有正确,然后在voidGPIO_cfg();函数中添加一句 GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE); 最后程序如下, #include“stm32f10x_lib.h” FlagStatusRX_status; FlagStatusTx_status; voidRCC_cfg(void); voidGPIO_cfg(void); voidUSART_cfg(void);
[单片机]
<font color='red'>STM32</font>单片机的Usart2串口的调试方法
STM32的优先级NVIC_PriorityGroupConfig的理解
STM32的优先级NVIC_PriorityGroupConfig的理解及其使用M3定义8位STM32只使用4位 写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整理的东西发表,最近项目需要2个串口,但是不是两个串口同时使用,只是随机使用其中一个,程序对2个串口的优先级需要配置; 此文思路:“中断优先级”思维导图-- 关键要点--- 结合图和要点相关程序应用例程讲解; 我们先来看ST公司的一张图: 我自己依据此图理解,应用思维导图画了一张方便理解:(如果看不清可通过ctrl+鼠标滑轮 放大看;) 前提条件1:组别优先顺序(第0组优先级最强,第4组优先级最弱):NVIC_PriorityGroup_0 N
[单片机]
<font color='red'>STM32</font>的优先级NVIC_PriorityGroupConfig的理解
STM32 获取寄存器的地址
如果需要使用TX1的DMA传输,就会涉及到配置DMA的外设地址。在这里,外设地址应该是USART1的DR寄存器的地址。可是如何获取该寄存器的地址呢? 现在实测了3种方式,都可以实现。 方法1: 直接查询手册中寄存器映像(map),USART1的DR地址为0x40013804 方法2: 手册中查看,DR寄存器的偏移地址为0X04,那么USART1的DR地址可以写成(USART1_BASE + 0X04)。 其中USART1_BASE在stm32f10xb.h中有定义 #define USART1_BASE (APB2PERIPH_BASE + 0x00003800U) 方法3: 如果我们要修
[单片机]
stm32 大容量芯片烧录出错
在烧录stm32f103vet6 的时候总是出错。 生成代码量相对芯片的容量不是很大,芯片是512K的flash,64K 的RAM 生成的代码大约32K MDK的配置是 full erase chip ,program verify reset and run 每次烧录的一定的时候就会停止响应, 解决方案一: 烧录之前先整体擦除,然后烧录 解决方案二: MDK的配置改成扇区擦除,如下图: 这个样子烧录可以成功,但是MDK大部分情况下无法显示进度条。 应该是个bug!!!!
[单片机]
<font color='red'>stm32</font> 大容量芯片烧录出错
基于STM32的Keil和偏移地址程序存储
有时候,我们不想让程序存储在起始的位置,比如现在有一段bootloader,对应的app(应用程序)存储的位置就会有一个偏移地址。那么,如何让程序存储在指定的偏移地址呢? 本文将结合STM32,给大家讲一讲在Keil和IAR开发环境中设置起始地址0x08010000的方法。 Keil配置方法 首先,打开工程目标选项:Project - Options for Target - Target。 修改目标ROM起始地址,如下图所示: 说明: 1、勾选的IROM即对应的存储区域; 2、起始地址(Start)和大小(Size)根据你实际情况进行配置。 IAR配置方法 类似方法,进入配置界面: 1、进入配置界面:Pooject
[单片机]
基于<font color='red'>STM32</font>的Keil和偏移地址程序存储
STM32系列芯片串口烧写工具
官方的FlashLoader使用着太过麻烦,一步一步下去,而且还不是每次都能顺利通过, 最近自己写了一个STM32系列芯片的串口烧写工具, 只需点一次烧写按钮,剩下的自动完成, 运行环境:.NET4.0 1.可以烧写最多5个程序+1个自定义的hex数据; 2.可以读取芯片信息; 3.可以读取芯片内容; 4.烧写选项可选读写校验, 整片擦除, 使能读保护, 循环烧写(烧写完会继续进行下一次的烧写, 方便生产); 应用截图 : 目前主流的STM32系列芯片都支持, 在MAP目录下可自定义扩展芯片配置文件; 版本更新 1.0.6 1.修复F0芯片获取资料不准确的BUG; 2.烧写过程中读取校验失败再多读取校验
[单片机]
<font color='red'>STM32</font>系列芯片串口烧写工具
最简单的方式 创建STM32的工程(使用标准库)-2
前文已经介绍创建一个简单的F103RC芯片的MDK V4工程文件,下面介绍一些其它的设置项目。 1:设置Output 和List的输出目录。在上文中(如下图)STM32100E-EVAL这个文件夹就是原工程文件设置的Output和List输出目录。但是我已经将项目改为“MySTM32”, 显然我要搞个我自己命名的文件来用作Output和list的输出目录。先在MDK-ARM文件夹下新建一个文件夹叫:Output-List 注:下图中 MDK-ARM目录下的Project_STM3210B-EVAL.dep 以及另外4个.dep文件,都可以删了。 2:看图操作。点击魔术棒按钮,打开Options for Target &
[单片机]
最简单的方式 创建<font color='red'>STM32</font>的工程(使用标准库)-2
基于Cortex-M3内核处理器的嵌入式Web服务器
   引言   目前,网络化控制己成为远程控制的主要研究方向,利用网络实现对局域乃至全球范围内设备的监控是工业控制系统的发展趋势 。嵌入式Internet远程监控技术作为网络化控制的代表,它解决了工业控制领域中异构网络互联问题,提高了传统装备的智能化水平,促进了传统产业结构的调整。嵌入式Web服务器尤其适用于嵌入式Internet应用,它通过Ethernet或Modem的连接可以轻松连接到任何网络,真正实现对设备的远程管理和控制。    实现方案   嵌入式Web服务器必须具备的基本功能包括:可控制与其连接的设备并获取设备的状态和数据;现场信息可以网页形式发布;可及时响应远程用户的控制命令。此外,嵌入式设备应具有功能简
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved