历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2019年01月07日 | STM32产生异相方波

2019-01-07 来源:eefocus

这几天一直在做蓝桥杯嵌入式开发历年的题目 在第七届决赛的模拟题中 有一个要求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了


推荐阅读

史海拾趣

福声科技(FUET)公司的发展小趣事

随着市场的不断变化和技术的飞速发展,福声科技深知技术创新的重要性。公司不断加大研发投入,组建了一支高素质的研发团队,专注于电磁式蜂鸣器、压电式蜂鸣器等新型产品的研发。通过持续的技术创新和产品升级,福声科技成功推出了一系列具有自主知识产权的电声元器件,不仅提升了产品的市场竞争力,还进一步拓宽了应用领域,如智能家居、安防系统等新兴市场。

Altera (Intel)公司的发展小趣事

质量是企业生存和发展的根本。福声科技自成立之初就高度重视产品质量管理,通过引入ISO9001质量管理体系,建立了完善的质量管理体系。公司从原材料采购、生产过程控制到成品检验,每一个环节都严格按照标准执行,确保产品质量的稳定性和可靠性。这一举措不仅赢得了客户的信赖和好评,也为公司赢得了更多的市场份额。

Graseby Infrared公司的发展小趣事
在进行任何维修或检查前,必须先切断电源,确保电路处于安全状态。
Flamar公司的发展小趣事

随着电子行业的全球化趋势日益明显,Flamar公司积极实施国际化战略,通过设立海外研发中心、生产基地和销售网络,不断拓展全球市场。公司先后在欧洲、亚洲等地建立分支机构,与当地企业建立紧密的合作关系,共同推动电子技术的创新与应用。通过国际市场的开拓,Flamar公司不仅实现了业务规模的快速增长,还进一步提升了品牌的国际知名度和影响力。

CalRamic Technologies Llc公司的发展小趣事

在21世纪初,随着电子行业的蓬勃发展,对于微型化、高性能电子元器件的需求日益增加。在这样的时代背景下,CalRamic Technologies Llc公司应运而生。公司由几位在电子行业有着丰富经验的工程师创立,他们看到了陶瓷电容器等元器件的巨大市场潜力。初创时期,公司面临着资金紧张和技术瓶颈等挑战,但团队凭借对市场的深刻理解和技术的不断创新,逐渐在电子元器件市场上占据了一席之地。

DAICO公司的发展小趣事

随着业务的不断发展,DAICO公司开始拓展全球市场。公司在全球范围内设立了多个办事处和生产基地,以便更好地服务客户。同时,DAICO还积极寻求与全球合作伙伴的合作共赢,共同推动电子行业的发展。通过与合作伙伴的紧密合作,DAICO在技术研发、市场开拓等方面取得了更加显著的成果。

问答坊 | AI 解惑

求vxworks网络驱动开发资料

求vxworks网络驱动开发资料…

查看全部问答>

我来说下关于论坛的看法(如果发错板块了,请版主见谅阿)

很久没上论坛了啊,最近一段时间太忙,今天上了下,发现人气还是很火,真的不错,现在很多的论坛,qq群虽然都很多人,但是讨论的太少,交流也有限。(不知道是不是人人都不爱说话的原因) 我支持我们这个论坛,希望能一直这么热闹下去,和大家一起 ...…

查看全部问答>

打印机数据获取

一台仪器(由专用微机控制, 输出为USB打印机接口),其输出为打印机 现,想把这台仪器输出的数据到PC上,编辑后,再打印 Q: 现在: 仪器  --- 输出 ---> 打印机(USB) 需求: 仪器  --- 输出--->PC(编 ...…

查看全部问答>

单片机开发深度资料

单片机开发深度资料…

查看全部问答>

吉他 电子 发展方向 研究领域

各位IT界的专家和同行们,你们有喜欢吉他的吗?我想了解一下有关吉他方面的电子发展前景,比如吉他的拾音器等等。谢谢!…

查看全部问答>

请问下UCOS+ARM9模式下如何编写串口通信

请问下UCOS+ARM9模式下如何编写串口通信 最近将UCOS移植到了ARM9下,但是编写串口通信时出了问题,主要是目前串口无法接受到PC机上的数据,请问各位朋友有谁碰到过类似的问题?…

查看全部问答>

USB资料共享

小弟最近学习USB,发现论坛这方面资料很少。上传些,希望大家能多多交流。…

查看全部问答>

在CCSV5怎样加载IAR工程

在CCSV5怎样加载IAR工程,求教…

查看全部问答>

开关AD中断会影响AD转换结果?

程序中在计算数值的时候将AD中断关闭,计算完成后再将AD中断打开,但是现在发现在AD采样率低的时候AD转换结果没问题,但是提高了采样率,AD结果就不对了,寄存器显示OVERRUN,貌似是数据丢失或者覆盖,这是咋回事呢? 开关AD中断不该影响AD转换啊? ...…

查看全部问答>

cc2650dk运行contiki-os

本帖最后由 lyzhangxiang 于 2015-7-2 23:07 编辑 搭建了一下开发环境,已经能够运行contiki了,基本和我预料的一样,分分钟可以跑contiki,就是这么easy。 最简单的hello-world 复杂一点的cc26xx-web-demo 效果 mqtt+coap+sensor ...…

查看全部问答>