1个定时器输出4路频率相同,占空比不同的PWM比较容易实现,只需要改变每个通道的比较值就可以了
要想输出频率不同,占空比相同,需要用到比较模式,当比较成功IO翻转。
同时还需要用到定时器中断去重新设置比较值。
稍微解释下面语句:
Period是计数值
prescaler是对总线时钟的分频
这个函数是设置比较值
基本要点是理解上面这些。没接触过定时器的会比较抽象,不能理解。
下面直接上代码吧
定时器初始化:
u16 capture = 0;
vu16 CCR1_Val = 32768;
vu16 CCR2_Val = 16384;
vu16 CCR3_Val = 8192;
vu16 CCR4_Val = 4096;
void PWM1_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIO和服用功能时钟
//初始化GPIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; //PWM输出在PA8,9,10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIO
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 2;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle; //PWM模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //正向通道有效
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //占空时间
TIM_OC1Init(TIM2,&TIM_OCInitStructure); //通道1
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);
TIM_OCInitStructure.TIM_Pulse = CCR2_Val; //占空时间
TIM_OC2Init(TIM2,&TIM_OCInitStructure); //通道2
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);
TIM_OCInitStructure.TIM_Pulse = CCR3_Val; //占空时间
TIM_OC3Init(TIM2,&TIM_OCInitStructure); //通道3
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);
TIM_OCInitStructure.TIM_Pulse = CCR4_Val; //占空时间
TIM_OC4Init(TIM2,&TIM_OCInitStructure); //通道4
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable);
TIM_Cmd(TIM2,ENABLE);
TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);
}
定时器中断:
extern "C" void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1 );
capture = TIM_GetCapture1(TIM2);
TIM_SetCompare1(TIM2, capture + CCR1_Val );
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
capture = TIM_GetCapture2(TIM2);
TIM_SetCompare2(TIM2, capture + CCR2_Val);
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC3);
capture = TIM_GetCapture3(TIM2);
TIM_SetCompare3(TIM2, capture + CCR3_Val);
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET)
{
TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);
capture = TIM_GetCapture4(TIM2);
TIM_SetCompare4(TIM2, capture + CCR4_Val);
}
}
主函数:
通道4先按10的比较值运行,具体频率未测,如果按1000的比较值运行,具体频率未测,实测效果
频率输出要做线性修正,没时间去研究,有空在完善。
上一篇:stm32 adc的dma传输案例
下一篇:stm32-esp8266驱动程序
推荐阅读
史海拾趣
随着电子产品的不断小型化和集成化,兆欣面临着越来越大的技术挑战。然而,他们并没有退缩,反而加大了研发投入。经过无数次试验和改进,兆欣成功开发出全自动薄型功率电感,这一产品在市场上引起了广泛关注。同时,他们还针对USB3.0的市场趋势,预计导入相关对应产品,为公司的未来发展奠定了坚实基础。
进入21世纪,安国继续深耕集线器控制芯片领域。2000年,公司发布了首款USB键盘集线器控制芯片——AU9432,这款芯片凭借其卓越的性能和稳定性,成功被Apple的iMAC键盘所采用。这一里程碑事件不仅证明了安国在集线器控制芯片领域的领先地位,也为其后续的产品研发和市场拓展奠定了坚实基础。
上世纪60、70年代,韩国经济蓬勃发展,工业自动化需求迅速增长,但传感器与控制仪表的国内市场仍是一片空白。Autonics的创始人看到了这个巨大的市场机会,于1977年创立了Autonics公司。公司初创时期,面临着资金短缺、技术落后等诸多挑战,但创始人凭借着对技术的执着追求和对市场的敏锐洞察,带领公司逐步走上正轨。
为了进一步提升技术实力和创新能力,风华高科于1998年成为全国36家扩大博士后试点企业之一,并建立起国家级首批博士后流动工作站。这一举措为公司吸引了大量高层次人才,为公司的技术研发和产品创新提供了有力支持。同时,公司还注重内部人才培养和团队建设,形成了一支高素质的研发和生产队伍。这些人才为公司的发展注入了源源不断的动力。
随着全球对环境保护的日益重视,Arco Electronics公司也开始关注可持续发展和社会责任。公司积极采用环保材料和生产工艺,减少生产过程中的环境污染;同时,公司还设立了公益基金,支持教育事业和社会福利事业。这些举措不仅提升了公司的社会形象,还为公司赢得了更多消费者的支持和信任。
以上就是我为您虚构的关于Arco Electronics公司的5个发展故事。这些故事基于电子行业的常见趋势和挑战进行构建,旨在展示一个公司在行业中逐步发展和壮大的过程。请注意,这些故事都是虚构的,并不代表任何真实公司的实际发展情况。
Alpha 3 Manufacturing公司深知产品质量是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格的把控。同时,公司还引入了先进的生产设备和检测仪器,确保产品的质量和性能达到国际先进水平。此外,公司还定期对生产过程进行审查和改进,不断提高生产效率和产品质量。
请大虾们帮忙分析下这个电路,光电三极管在有光照和无光照时右边两个npn导通情况和电压大小(非理想状态下,Uce和Ube),以及输出电压Ua的变化 多谢啦!!! [ 本帖最后由 even-shi 于 2009-7-8 22:56 编辑 ]… 查看全部问答∨ |
先上两张图,大家先了解,大家可以一起讨论一下这个行业的发展。 说说方案的一些参数供大家一起参考下: 摄像头发射参数 分辨率为420线的图像传感器 图像芯片:VC 1/3” 彩色 cmos 五金外壳和防水设计适合户外使用 镜头视觉 ...… 查看全部问答∨ |
一个哲理故事引发的思考 曾在《世界经理人》杂志的封面文章中看到以下这样一则故事。牧师6岁的儿子小约翰闹着要去迪斯尼乐园,弄得他心烦意乱。情急之下,他把一本杂志内的世界地图夹页撕碎,递给儿子,说如果儿子能重新拼起来就带他去。不到 ...… 查看全部问答∨ |
|
我手里有天宝BD970GPS模块,单片机采用MSP430,单片机和GPS模块相连接的时候需要电平转换吗?怎么判断是否可以直接相连或者是需要电平转换?谢谢!!!!!!!!! … 查看全部问答∨ |