STM32产生异相方波

发布者:zcyzwj最新更新时间:2019-01-07 来源: eefocus关键字:STM32  异相方波 手机看文章 扫描二维码
随时随地手机看文章

这几天一直在做蓝桥杯嵌入式开发历年的题目 在第七届决赛的模拟题中 有一个要求PA6和PA7产生两个异相并且频率可调的方波 后来我研究了一下STM32的Output comare mode,


因为要调节频率 所以选择了toggle 模式 使方波产生异相在中断中设置就行 先上手册的图


那 这是张老图了



在来看一下 官方StdLib3.5的OCToggle模式下的中断函数


void TIM1_BRK_TIM9_IRQHandler(void)

{

  /* TIM9_CH1 toggling with frequency = 366.2 Hz */

  if (TIM_GetITStatus(TIM9, TIM_IT_CC1) != RESET)

  {

    TIM_ClearITPendingBit(TIM9, TIM_IT_CC1 );

    capture = TIM_GetCapture1(TIM9);

    TIM_SetCompare1(TIM9, capture + CCR1Val );

  }

 

  /* TIM9_CH2 toggling with frequency = 732.4 Hz */

  if (TIM_GetITStatus(TIM9, TIM_IT_CC2) != RESET)

  {

    TIM_ClearITPendingBit(TIM9, TIM_IT_CC2);

    capture = TIM_GetCapture2(TIM9);

    TIM_SetCompare2(TIM9, capture + CCR2Val);

  }

}


OCToggle的运行方式基本是这样的:

如果TIMx_CNT=TIM_CCR1 那么就发生上面的中断 在中断里 他会将CCR1的值加上你自己设定的CCR1Val值 再赋值到CCR1 上 每发生一次中断 就会将电平翻转(toggle)


因为两者的频率一样 所以发生两个通道中断也应该是紧挨着的 


所以为了保持俩通道的相位差 在通道1发生中断时 再根据你的CCR2Val值的加上相应的值赋给CCR2 就相当于在通道1中端时 把通道2的时刻往后延时了一会儿


像下面这样


void TIM3_IRQHandler(void)

{

 

  if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)

  {

    TIM_ClearITPendingBit(TIM3, TIM_IT_CC1 );

    capture = TIM_GetCapture1(TIM3);

    TIM_SetCompare1(TIM3, capture + CCR1Val );

TIM_SetCompare2(TIM3, capture +200);

  }

 

 

  if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET)

  {

    TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

    capture = TIM_GetCapture2(TIM3);

    TIM_SetCompare2(TIM3, capture + CCR2Val);

  }

}


我CCR1Val和CCR2Val都设定的1000 加上200后CH2就产生了相移



原理是这样 在初始化时可以赋予不同的初值  就不需要开中断进行toggle了


关键字:STM32  异相方波 引用地址:STM32产生异相方波

上一篇:STM32串口空闲中断问题
下一篇:有关STM32F103C8T6使用ST_Link的注意事项

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

STM32学习笔记--------时钟体系
stm32的时钟体系参考(转自正点原子,仅用于学习交流): 一、时钟是什么? 时钟:给单片机提供一个时钟信号(某个频率),协调单片机内部组件同步工作,实现与外部设备通信的同步。(串口的波特率同步)相当于我们的心脏,是核心的部分。 二、时钟源 STM32103的5个时钟源 HSE 高速外部时钟 RC振荡器 频率为8MHz HSI 高速内部时钟 外接时钟4MHz~16MHz LSI 低速内部时钟 RC振荡器频率为40KHz 供WDG看门狗 LSE 低速外部时钟 32.768MHz 供给RTC PLL 锁相环倍频输出(范围2~16倍)最大不超过72MHz 系统时钟来源SYSCLK HSI HSE PLL 时钟
[单片机]
<font color='red'>STM32</font>学习笔记--------时钟体系
STM32 LCD12864 串行通信模式
lcd12864简介 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字。也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 注: 我们所用的LCD屏的命名,基本都是按照其分辨率来进行命名的
[单片机]
<font color='red'>STM32</font> LCD12864 串行通信模式
STM32控制4个LED灯循环点亮源程序
电路原理图如下: 单片机源程序如下: #include led.h void Delay(unsigned int count); //延时函数 //int main(void) //{ // // LED_Init(); //初始化与LED连接的硬件接口 // while(1) // { // u32 LED=0x00000001;//设置初始控制码 // //逐一点亮 // for(u8 i=0;i 4;i++) // { // GPIO
[单片机]
<font color='red'>STM32</font>控制4个LED灯循环点亮源程序
STM32的BootLoader 从SD卡更新固件
1. 前言 2. 初识BootLoader 2.1 百度百科的BootLoader 2.2 BootLoader的简单理解 2.3 BootLoader的作用 3. BootLoader预备知识 3.1 复位序列 3.1.1 栈指针 3.1.2 复位向量 3.2 重定位中断向量表 3.2.1 STM32的中断向量表 3.2.2 设置中断向量表偏移 3.3 分散加载文件相关 3.3.1 C语言的函数地址 3.3.2 BootLoader占用的ROM 3.3.3 修改ROM起始地址 3.4 hex文件和bin文件 3.4.1
[单片机]
<font color='red'>STM32</font>的BootLoader 从SD卡更新固件
STM32高级开发(15)-使用eclipse开发STM32
在最起初的时候,我刚刚接触linux上单片机的开发,最喜欢的就是 eclipse + arm-plug-in + arm-none-eabi 的开发环境,因为这是在Linux上最接近于windows下keil、IAR等IDE的开发方式,然而那是由于对eclipse亦或是makefile等编译过程中的工具的不甚了解,很多时候会遇到一些莫名的错误,也导致了那是觉得这样的环境很鬼畜,现在看来多是一些很浅显的问题,直到最近我再一次的尝试了eclipse开发环境的搭建和使用,我才很顺利的完成了程序的配置。现在也把这个方法推荐给大家,不过在使用这个方式前,还是建议大家先把之前的文章内容看懂了,否则很多时候遇到问题都会不知道怎么解决。 安装
[单片机]
<font color='red'>STM32</font>高级开发(15)-使用eclipse开发<font color='red'>STM32</font>
STM32一定时器产生不同频率的PWM
平时记性实在太差,调试完的程序,过两天又忘了,往往需要一阵子才能想起来,有时以前的资料找不到了,更是恼火,不得不重复到网上搜索。刚刚调试成功了一个类型的程序,立刻记下来,呵呵,不要又忘记了。 STM32产生PWM是非常的方便的,要需要简单的设置定时器,即刻产生!当然,简单的设置对于新手来产,也是麻烦的,主要包括: (1)使能定时器时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); (2)定义相应的GPIO: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GP
[单片机]
STM32之RTC使用
RTC使用说明 STM3f10x的RTC时能涉及到的寄存器有RCC,BKP和RTC这三个大类寄存器;其中RCC主要控制了实时时钟和备份区的电源使能和时钟使能;RTC模块和时钟配置系统的寄存器是在后备区域的(即BKP),通过BKP后备区域来存储RTC配置的数据可以让在系统复位或待机模式下唤醒后RTC里面配置的数据维持不变;为此备份区还得涉及一个寄存器PWR,电源管理寄存器,备份区的写保护位在PWR- CR的第八位。 由于整个RTC都是位于后备区,而且RTC的APB1总线和内核的APB1总线是独立的,所以在系统复位和唤醒时,RTC和BKP的那些时钟不用从新配置;他们只受Backup domain software reset这个位
[单片机]
<font color='red'>STM32</font>之RTC使用
按键开关机电路图 按键开关机电路设计方案
最近做个基于STM32脑波检测的项目,甲方爸爸要求使用按键进行开关机。在网上查了一些资料,找到了很多案例分享,在此进行总结。 主要分为以下两部分: 单片机控制按键开关机电路 独立按键开关机电路 1、单片机控制按键开关机电路 1.1、简约版 图中Ctr和Key接单片机管脚,作用如下: Ctr作为开关控制用 Key作为按键检测用 操作流程: 开机:按下按键,Q1导通,单片机上电,控制Ctr为低电平,保持Q1导通。 关机:再按下按键,单片机控制Ctr为高电平,此时松开按键Q1截至,单片机停电。 如图: 简约版 优缺点分析: 优点:电路简单,元器件比较少。 缺点:在停机状态下单片机的IO口依旧带电,正常使用没问
[单片机]
按键开关机电路图 按键开关机电路设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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