关于动态改变STM32 PWM占空比的问题

发布者:喜悦的38号最新更新时间:2015-11-12 来源: eefocus关键字:动态改变  STM32  PWM  占空比 手机看文章 扫描二维码
随时随地手机看文章
  while (1)
  {
    Delay(500);
    if(CCR4_Val>1)
    
      CCR4_Val--;
      TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
      TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
      TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

      TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    
    else
    
      CCR4_Val=990;
      TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
      TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
      TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
      TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

      TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    
  }
}
在主程序里改变对比值来改变PWM占空比,上面的程序是不是太笨了,有没有其他方法,请高手指点
MCU2008 (2008-9-12 10:43:53)
是太笨了...
sunke9 (2008-9-12 10:47:56)
我的用法和你一样
while (1)
  {
        Delay(0x0000FFFF);
        CCR1_Val = ADC_ConvertedValue*4;
        CCR2_Val = 16000 - ADC_ConvertedValue*4;
              
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

        TIM_OC1Init(TIM2, &TIM_OCInitStructure);

        TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);

  }
nomoneyiv (2008-9-12 11:29:08)
在中断里搞!
nomoneyiv (2008-9-12 11:33:22)
比如:
void TIM1_UP_IRQHandler(void)
{
    TIM1_SetCompare1(pwm_val_c1);
    TIM1_SetCompare3(pwm_val_c3);
    TIM1_SetCompare2(pwm_val_c2);
    TIM1_ClearITPendingBit(TIM1_IT_Update);

}
然后在主循环里,更改值
pwm_val_c1++;    之类的。
020411 (2008-9-12 15:21:42)
谢谢STM32青菜
yemingxp (2008-9-12 20:02:26)
关于动态改变STM32 <wbr>PWM占空比的问题 关于动态改变STM32 <wbr>PWM占空比的问题 关于动态改变STM32 <wbr>PWM占空比的问题 关于动态改变STM32 <wbr>PWM占空比的问题 关于动态改变STM32 <wbr>PWM占空比的问题 关于动态改变STM32 <wbr>PWM占空比的问题 关于动态改变STM32 <wbr>PWM占空比的问题
aleyn (2008-9-15 14:05:15)
此贴最终解惑者是谁?
sw笨笨 (2009-2-24 07:31:01)
while (1)                                           //无限循环
{
  CCR4_Val=CCR4_Val+0x1000;               //变量递增
  if(CCR4_Val >= 0xffff) CCR4_Val=0;        //变量归零

  TIM_SetCompare4(TIM3, CCR4_Val);    //变更长度
  Delay(0xffff);                                                  //延时

}

selina (2009-12-12 15:28:56)
好像只能在中断内做吧
wslaurora (2010-1-26 15:48:33)
通过tim更新时间触发DMA传输(循环模式),岂不是更简单?
   
        TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);


    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)TIM1_CCR1_Address;         //TIM1通道1外设捕获/比较寄存器首地址
    DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Buffer;   //内存数据缓存首地址
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;         //外设作为数据传输的目的
    DMA_InitStructure.DMA_BufferSize = 256;         //DMA缓存大小为256

关键字:动态改变  STM32  PWM  占空比 引用地址:关于动态改变STM32 PWM占空比的问题

上一篇:STM32 定时器(二)——定时器产生不同频率的PWM
下一篇:STM32 外部(IO)中断EXTI的应用

推荐阅读最新更新时间:2024-03-16 14:39

一款基于stm32的毕业设计方案
  设计选用STM32单片机作控制器,设计温度单反馈的控制系统,对电加热水器内水的温度进行控制。通过PT100温度传感器实现对水温信号的采集,并利用模拟量前向通道来对水温信号进行处理。利用STM32单片机进行控制输出PWM信号,用此信号控制接触器进而控制电加热水器的电源通断,最终实现对水温的控制。同时用组态软件设计监控界面来实现对水温的控制显示。通过对此课题的设计,能够使自动化的学生对工业过程控制对象具有更进一步的了解,同时熟练掌握自动化控制系统的设计流程,为以后的工作学习打下坚实基础。   一、控制系统硬件设计   1、控制系统硬件总体设计   温度是一个很重要的变量,需要对其进行准确地控制。温度控制系统常用来保持温度恒定或者使
[单片机]
一款基于<font color='red'>stm32</font>的毕业设计方案
STM32 DMA应用中的几个常见问题
1、概念上的误解 我们知道DMA传输是在DMA请求下,将数据从源端传输到目的端。 常有人将DMA请求跟DMA的源端或目的端混为一谈。这里,我们可以将DMA传输类比成收发快递,发件方即DMA源端,收件方即DMA目的端,而DMA请求端就是呼叫快递的人。这个呼叫快递的人可能是发件方、也可能是收件方,还可能是另外第三方。比方你要发个快递,叫快递的人可能是公司的前台美眉。 具体到我们STM32应用,比方通过DMA将内存数据传输给UART DR寄存器发送出去,源端是存储相关待发送数据的内存区域,目的端是UART DR数据寄存器。至于DMA请求,可以是UART发送空事件【TXE】,也可以是定时器的某个周期性触发事件等。 在STM32各个系列的参
[单片机]
像51一样操作STM32的IO
//----------------------------------------------------------------------------------------------------- //别名区 ADDRESS=0x4200 0000 + (0x0001 100C*0x20) + (bitx*4) ;bitx:第x位 // 把 位段地址+位序号 转换别名地址宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF) 5)+(bitnum 2)) //把该地址转换成一个指针 #define MEM_ADDR(
[单片机]
STM32外设资源查询方法,对比C8T6和ZET6
对应不同型号的单片机的外设资源需要找相应的单片机的数据手册,比如STM32F103ZET6数据手册,STM32F103C8T6数据手册. 根据FLASH大小STM32F103ZET6 - 为HD型,STM32F103C8T6 - 为MD型。 STM32F103家族系列芯片外设对比 STM32F103ZET6 外设资源数据手册一览 从上图也可以看到ZET6一共有11个定时器,包括2个高级定时器、4个通用定时器、2个基本定时器…当然还有2个看门狗和1个系统定时器。 再由这个两个图也可以看出TIM1/8是高级定时器、TIM2/3/4/5是通用定时器、TIM6/7是基本定时器。 高级定时器在APB1总线上,通用和
[单片机]
<font color='red'>STM32</font>外设资源查询方法,对比C8T6和ZET6
建立STM32的工程步骤(版本1)
建立STM32的工程步骤(版本1):
[单片机]
建立<font color='red'>STM32</font>的工程步骤(版本1)
STM32单片机上电后时钟的默认配置过程
写作原由:今日接手用stm32f100xx芯片开发的项目,以前用的是stm8s 和stm32f103xx芯片;因为在别人的项目代码的基础上做2次开发,但是发现那个代码main函数中没有对系统时钟的设置的相关函数,一直纳闷,但也没有深究,直至昨日 调试时出现串口收发数据出错,源代码在原项目的板子上串口发送、接收数据正常,同样程序在项目板子上收发的数据不正确, 两块板子芯片一样,串口收发管脚一样,最后发现原来板子外部晶振是8MHZ ,新板子外部晶振是12MHZ; 而在STM32固件库中,默认的外部晶振是8MHZ,由于时钟源不正确,导致波特率不正确,当然收发的数据也不正确了…..我勒个去!都怪自己平时看问题“不求甚解”。 波特率与
[单片机]
<font color='red'>STM32</font>单片机上电后时钟的默认配置过程
利用STM32 的串口来发送和接收数据实验
0目标 1 STM32 串口简介 2 硬件设计 3 软件设计 4 下载验证 0.目标 利用串口 1 不停的打印信息到电脑上,同时接收从串口发过来的数据,把发送过来的数据直接送回给电脑。 1.STM32 串口简介 串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO 时钟使能 2) 串口复位 3) GPIO 端口模式设置 4) 串口参数初始化 5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 6) 使能串口 7) 编写中断处理函数 注:对于复用功能的 IO,我们首先要使能 GPIO 时钟,然后使能复用功能时钟,同时要把 GPIO 模式设置为复用功能对应的模式。 查看
[单片机]
利用<font color='red'>STM32</font> 的串口来发送和接收数据实验
基于STM32的实时心率检测仪设计
一、开发环境介绍 主控芯片: STM32F103ZET6 代码编程软件: keil5 心率检测模块: PulseSensor WIFI模块: ESP8266 --可选的。直接使用串口有线传输给上位机也可以。 上位机: C++(QT) 设计的。 支持PC机电脑、Android手机显示。 与上位机的传输协议: 支持串口传输、WIFI网络传输两种。 如果是PC就可以直接连接串口传输数据,如果不方便可以直接通过WIFI---TCP协议传输。 二、PulseSensor心率模块介绍 PulseSensor 是一款用于脉搏心率测量的光电反射式模拟传感器。 可以将其佩戴于手指、耳垂、手腕等处,通过杜邦线--导线将引脚连接到单片机,可将采集到
[单片机]
基于<font color='red'>STM32</font>的实时心率检测仪设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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