STM32 输出比较错误及解决

发布者:RadiantBeauty最新更新时间:2016-10-13 来源: elecfans关键字:STM32  输出比较错误 手机看文章 扫描二维码
随时随地手机看文章

程序1:TIM2输出比较,产生频率为366.2Hz的方波

#include "stm32f10x.h"
void RCC_configuration(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE); //开启GPIO的时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
}

void Led_Init(void)      
{
   GPIO_InitTypeDef GPIO_InitStruct;  //定义GPIO初始化的结构体
  
   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; //选中管脚1   TIM2的通道2
   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 选择速度50MHZ
   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
   GPIO_Init(GPIOA,&GPIO_InitStruct);   //初始化IO口A
}

void NVIC_Configuration(void)    //NVIC配置
{
  NVIC_InitTypeDef NVIC_InitStruct;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  //中断组0
  NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); //中断向量FLASH
 
  NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级0 
     NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;   //从优先级0
   NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;    //中断向量使能
  NVIC_Init(&NVIC_InitStruct);  
}


void TIM2_Configuration(void)  
{
  TIM_TimeBaseInitTypeDef TIM_BaseInitStruct;
  TIM_OCInitTypeDef TIM_OCInitStruct;

  TIM_BaseInitStruct.TIM_Period = 65535;  //重载值
  TIM_BaseInitStruct.TIM_Prescaler = 2; //预分频值
  TIM_BaseInitStruct.TIM_ClockDivision = 0; 
  TIM_BaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数0 ~ Period
  TIM_TimeBaseInit(TIM2,&TIM_BaseInitStruct);   //定时器寄存器初始化
  /*********************通道1,产生频率为366HZ************/
  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_Toggle; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStruct.TIM_Pulse = 32768; //设置待装入捕获比较寄存器的脉冲值
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高
  TIM_OC1Init(TIM2, &TIM_OCInitStruct);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器
  TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE); //TIM中断使能  
  TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的预装载寄存器
  TIM_Cmd(TIM2,ENABLE);       //定时器使能
}

int main(void)
{
  /* Setup STM32 system (clock, PLL and Flash configuration) */
  SystemInit();
  RCC_configuration();
  Led_Init();
  NVIC_Configuration();
  TIM2_Configuration();
 
  while (1)
  {
  }
}
/********************中断函数*************************/
void TIM2_IRQHandler(void)
{
 uint16_t capture = 0;
        /**************通道1,366.2HZ*******************/
 if(TIM_GetITStatus(TIM2,TIM_IT_CC1) != RESET)
 {
  TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
    capture = TIM_GetCapture1(TIM2);
   TIM_SetCompare1(TIM2,capture + 32767);
 }

}


 

问题1:为什么我的输出结果不是1:1的方波,是占空比为1:3的方波?
问题2:为什么我的输出频率是183.1,也就是说TIM2CLK = 36M,但是我改成PWM模式时,测的TIM2CLK = 72M,难道是输出比较模式时TIM的倍频器不工作?
问题出在:  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIMx在CCR2上的预装载寄存器 
因为我使用的是比较输出,并且在中断里面设置频率,所以利用TIM_SetCompare1(TIM2,capture + 32767)这个函数来改变比较寄存器的值, 
所以当预装载寄存器被使能后,没中断一次,比较寄存器的值就被重新赋值了,这和中断里面设定频率有冲突, 
所以解决方法是TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable). 
这样就可以利用一个定时器产生4种不同频率,不同占空比的方波了,如有不对的地方,希望大家指点
关键字:STM32  输出比较错误 引用地址:STM32 输出比较错误及解决

上一篇:stm32 12864驱动
下一篇:STM32输出比较模式输出不动频率的脉冲

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

2021年STM32中国峰会在深圳举行,ST携合作伙伴展示创新成果
2021年STM32 中国峰会在深圳举行,意法半导体携合作伙伴展示创新成果 • 以 芯”生态、“助”安全、“连”未来为主题,2021年STM32峰会聚焦工业与安全、人工智能与传感技术、云接入与连接、生态与创新 • 在为期两天的线下/线上展会及分会场中,意法半导体与35个合作伙伴将带来200多个方案演示和55场技术研讨会 2021年4月27日,中国深圳 – 服务多重电子应用领域的全球半导体领导者意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM) 将于4月28-29日在深圳华侨城洲际大酒店举行2021年STM32中国峰会。 作为备受瞩目的业界年度盛会,第五届STM32峰会即将拉开帷幕。
[单片机]
基于CORTEX的STM32的三相电能表方案
背景   电能表是用来测量电能的仪表,又称电度表,火表,电能表,千瓦小时表,指测量各种电学量的仪表。基于ARM的方案已经出现,但是适合应用的ARM7 TDMI在性能上不尽人意,同时外设资源不足;而更高端的ARM9系统的复杂程度很高,成本也较高。所以要研究一种廉价的,满足客户需求的电能表,来填补这个空缺。   一、关于CORTEX-M3与STM32   最新一代ARM v7内核,命名为Cortex,同ARM7/9/10/11相比在架构上有了革命性突破。它采用高效的哈佛结构三级流水线,达到1.25DMIPS/MHz,在功耗上更是达到0.06mW/MHz。Cortex-M3使用Thumb-2指令集,自动16/32位混合排列。单周
[工业控制]
基于CORTEX的<font color='red'>STM32</font>的三相电能表方案
stm32休眠_RTC定时唤醒来喂狗
在STM32开发中经常会用到独立看门狗(IWDG)和低功耗模式,看门狗是为了检测和解决由软件错误引起的故障,低功耗模式是为了在CPU不需要继续运行时进入到休眠模式用以节省电能。其中独立看门狗的时钟由独立的RC振荡器(STM32F10x一般为40kHz)提供,即使在主时钟出现故障时,也仍然有效,因此可以在停止和待机模式下工作。而且独立看门狗一旦启动,除了系统复位,它不能再被停止。但这样引发的一个问题是当MCU进入到低功耗模式后由于CPU停止运行无法喂狗,会导致系统频繁复位。那如何解决这个问题呢,难道独立看门狗和低功耗模式没法同时使用? 一个很好的方式是在休眠模式下通过RTC定时唤醒来喂狗,喂完够在进入继续进入到休眠模式。比如看门
[单片机]
STM32串口中断接收方式详细比较
简介:本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机,具体下面详谈 实例一: void USART1_IRQHandler(u8 GetData) { u8 BackData; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志. GetData = UART1_GetByte(BackData); //也行GetData=USART1- DR; USART1_SendByte(GetData);
[单片机]
stm32的断言机制(assert)的理解
在做stm32的库程序移植时出现错误“#error Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file) ”,未选择STM32F4xx 设备导致多.h文件未被载入,发现是STM32F429_439xx的宏定义未定义,解决方法是在工具魔法棒 中的C/C++页的#define栏中添加相应的宏定义。 出现错误“.ObjectsSTM32F429IGT6_Demo.axf: Error: L6218E: Undefined symbol assert_param (referred from
[单片机]
<font color='red'>stm32</font>的断言机制(assert)的理解
再造STM32---第八部分:新建工程—库函数版
了解 STM32 的标准库文件之后,我们就可以使用它来建立工程了,因为用库新建工程的步骤较多,我们一般是使用库建立一个空的工程,作为工程模板。以后直接复制一份工程模板,在它之上进行开发。 8.1 新建工程: 版本说明: MDK5.27 (MDK 即 KEIL 软件) 版本号可从 MDK 软件的“Help-- About uVision”选项中查询到。 8.1.1 新建本地工程文件夹: 为了工程目录更加清晰,我们在本地电脑上新建一个“工程模板”文件夹,在它之下再新建 6 个文件夹,具体如下: 表 8-1 工程目录文件夹清单 名称 作用 Doc 用来存放程序说明的文件,由写程序的人添加 Li
[单片机]
再造STM32---第八部分:新建工程—库函数版
STM32 使用DMA+DAC+TIMER输出正弦波
之前已经简单论述过,根据我个人菜鸟的了解与认识,对之前的知识进行整理回顾: DMA:我的理解就是一个通道,或者是一座桥梁。在静态内存到静态内存,或者外设到静态内存间的一个通讯的通道。建立这个通道的好处是:可以抛开CPU,不占用CPU的资源,直接使用这块内存的内容,速度也会加快。 DAC:STM32F103中有两个DAC,可以同时使用。DAC的作用就是将数字量转化为模拟量(电压),在这就不作太多的讲解。 TIMER:定时器。不作讲解。 那么对于使用DMA+DAC+TIMER产生正弦波的原理或过程,我有这样一个简单的理解:先将一个可以生成正弦波的数据表保存在静态内存中,然后在DAC以及这块内存中间使用DMA建立一个通道
[单片机]
“游览”意法半导体展位,学习创新服务汽车、工业
慕尼黑电子展是一场大型电子集会,几乎包含了电子领域内的所有相关产品和技术,分布在不同的展区,每个展区都人声鼎沸。但要说最热闹的,人数最多的还是半导体展区,在这个展区内聚集了全球芯片TOP 10的厂商,每家厂商的展位都是门庭若市,工作人员向每位感兴趣的参展者展示、讲解自家的产品。在意法半导体( ST Microelectronics,以下简称 ST )的展位,我们记者团也充当了一回游客,由 ST 相关负责人便带领我们开始了ST展位“一日游”,介绍了ST近几年在 汽车电子 和 工业 两个领域的努力。 意法半导体展位 由 汽车电子 和分立器件组成的ADG(Automotive & Discrete Group)是ST业务的重
[汽车电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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