历史上的今天
返回首页

历史上的今天

今天是:2024年09月25日(星期三)

正在发生

2019年09月25日 | stm103c8t6 tim1四个通道配置速度不一样(已解决)

2019-09-25 来源:eefocus

    使用这款芯片利用TIM1输出四路PWM信号,在改变占空比的时候发现CH1速度正常,CH2,CH3,CH4会有少量延时才会生效。


目前没有找到问题所在原因,有大牛知道可以在下面回复下小弟。下面是代码。


void PWM4_Init(u32 arr,u32 psc)

{  

         GPIO_InitTypeDef GPIO_InitStructure;

        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        TIM_OCInitTypeDef  TIM_OCInitStructure;

       

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_TIM1|RCC_APB2Periph_AFIO , ENABLE);  //使能GPIO外设时钟使能

                                                                                     

                                                                             

 

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11 ; //TIM_CH1

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOA, &GPIO_InitStructure);

 

 

        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K

        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频

        TIM_TimeBaseStructure.TIM_ClockDivision =0; //设置时钟分割:TDTS = Tck_tim

        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

//TIM1通道一

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

        TIM_OCInitStructure.TIM_Pulse = 100;  /*占空长度 0 – 周期(max)*/

        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高

        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

//TIM1通道二

  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = 100; /*占空长度 0 – 周期(max)*/

  TIM_OC2Init(TIM1, &TIM_OCInitStructure);

  TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

//TIM1通道三

  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = 100; /*占空长度 0 – 周期(max)*/

  TIM_OC3Init(TIM1, &TIM_OCInitStructure);

  TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

//TIM1通道四

  TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable;

  TIM_OCInitStructure.TIM_Pulse = 100; /*占空长度 0 – 周期(max)*/

  TIM_OC4Init(TIM1, &TIM_OCInitStructure);

  TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);

 

  TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主输出使能        

  TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器

        TIM_Cmd(TIM1, ENABLE);  //使能TIM1

}

while(1)

{

// LED0=!LED0;

// TIM_Cmd(TIM1, DISABLE);  //使能TIM1

TIM1->CCR1=50;

TIM1->CCR2=50;

TIM1->CCR3=50;

TIM1->CCR4=50;

// TIM_Cmd(TIM1, ENABLE);  //使能TIM1

//delay_ms(1000);

delay_ms(1000);

delay_ms(1000);

//TIM_Cmd(TIM1, DISABLE);  //使能TIM1

TIM1->CCR1=250;

TIM1->CCR2=250;

TIM1->CCR3=250;

TIM1->CCR4=250;

//TIM_Cmd(TIM1, ENABLE);  //使能TIM1

 

//delay_ms(1000);

delay_ms(1000);

delay_ms(1000);

}

主函数不断的更新占空比值。CH2,CH3,CH4比CH1生效慢,示波器看到的。




解决时间:18-5-14-----------------------------------------------------------------------------------------------------------------------------------

这个原因是因为库函数的原因,寄存器没有配置完整。



需要把CCMR1和CCMR2中的OC1PE,OC2PE,OC3PE,OC4PE变为1或者0,四个通道就会同步了。

0代表可随时写入寄存器值

TIM1->CCMR1&=0xF7F7; //关闭事件更新值

TIM1->CCMR2&=0xF7F7;

1代表有更新事件才更新寄存器值

TIM1->CCMR1|=0x808; //开启事件更新值

TIM1->CCMR2|=0x808;


推荐阅读

史海拾趣

Amphenol(安费诺)公司的发展小趣事

Amphenol Corporation,通常简称为Amphenol,是一家全球领先的连接技术公司,提供广泛的连接器解决方案,涵盖了航空航天、汽车、通信、工业、医疗和军事等多个领域。以下是关于Amphenol公司发展的五个相关故事:

  1. 创立与起步阶段:Amphenol公司成立于1932年,总部位于美国康涅狄格州沃拉姆。最初,公司致力于生产无线电连接器,并通过不断的创新和技术改进,逐步发展成为连接器行业的领导者之一。在第二次世界大战期间,Amphenol公司为美国军队提供了大量的军用连接器,为公司的发展奠定了坚实的基础。

  2. 技术创新与产品多样化:随着电子技术的不断进步和市场需求的不断变化,Amphenol公司不断进行技术创新,拓展产品线的多样性。除了传统的连接器产品,公司还开发了许多新型连接器,如光纤连接器、高速数据连接器、环境密封连接器等,以满足不同行业的需求。

  3. 全球化发展与市场拓展:Amphenol公司在全球范围内建立了广泛的销售网络和生产基地,实现了全球化布局和市场覆盖。公司在美国、欧洲、亚洲和其他地区设有多个生产工厂和研发中心,为客户提供当地化的服务和支持。通过不断扩大市场份额和提升产品质量,Amphenol公司成为了全球连接器市场的主要参与者之一。

  4. 客户合作与定制化解决方案:Amphenol公司与客户建立了紧密的合作关系,根据客户的需求和应用场景,提供定制化的连接器解决方案。公司的工程团队与客户共同设计和开发符合特定要求的产品,为客户提供专业化和个性化的服务。这种定制化解决方案能够满足客户多样化的需求,增强了公司在市场上的竞争优势。

  5. 质量管理与持续改进:Amphenol公司高度重视产品质量管理,严格遵循国际质量管理体系标准。公司的生产工艺和质量管理体系通过了ISO 9001质量管理体系认证,并持续进行质量改进和技术创新。此外,Amphenol公司的产品还通过了各种行业认证和标准,如航空航天领域的AS9100认证等,确保产品的可靠性和稳定性。

这些故事展示了Amphenol公司从创立初期到如今在技术创新、产品多样化、全球化发展、客户合作与定制化解决方案以及质量管理与持续改进等方面取得的重要进展。

American Technical Ceramics (ATC)公司的发展小趣事

美国技术陶瓷公司(ATC,American Technical Ceramics)是一家专注于设计、制造和销售高性能技术陶瓷产品的公司。以下是关于ATC公司发展的五个相关故事:

  1. 公司成立与初期发展:美国技术陶瓷公司成立于1967年,总部位于美国纽约州的Huntington。公司最初以生产高质量的多层陶瓷电容器而闻名。在成立初期,ATC专注于开发陶瓷材料和制造工艺,确保产品具有优异的电气性能和可靠性,满足客户的需求。

  2. 技术创新与产品扩展:随着技术的发展和市场需求的变化,ATC不断进行技术创新,并扩展产品线。公司推出了一系列新产品,包括陶瓷电感器、滤波器、天线以及定制陶瓷元件等。这些产品在通信、航空航天、医疗、汽车等领域得到广泛应用。

  3. 国际业务拓展:为了满足全球客户的需求,ATC逐步拓展了国际业务。公司在亚洲、欧洲和其他地区设立了销售办事处和分支机构,建立了全球销售网络。通过与国际客户和合作伙伴的合作,ATC不断拓展市场份额,并加强了在全球市场的竞争力。

  4. 质量控制与认证:作为一家专注于高性能技术陶瓷产品的公司,ATC始终将质量放在首位。公司实施严格的质量控制措施,从原材料采购到生产制造、产品测试和交付都严格把关,确保产品符合客户的要求和行业标准。ATC的质量管理体系获得了ISO 9001认证,为客户提供了信心和保障。

  5. 持续创新与发展:随着电子行业的不断发展和技术的进步,ATC致力于持续创新和发展。公司不断投入研发,并与客户合作开发定制化的解决方案,以满足不断变化的市场需求。同时,ATC也积极关注可持续发展和环保责任,努力降低对环境的影响,并致力于推动绿色技术的发展。

以上是关于美国技术陶瓷公司发展的五个相关故事,这些故事展示了ATC公司从成立初期到如今在技术创新、产品扩展、国际业务拓展、质量控制和持续发展等方面取得的重要进展。

DESCO公司的发展小趣事

为了进一步提升竞争力,DESCO公司进行了多次收购和资源整合。例如,在XX年,公司成功收购了美国一家知名的防静电产品制造商,获得了其先进的生产技术和销售渠道。这次收购使DESCO公司的产品线更加丰富,市场覆盖面更加广泛。此外,公司还加强了与其他企业的战略合作,共同开发新产品、拓展新市场。

Eink公司的发展小趣事
进入21世纪,E-Ink继续推动电子纸技术的发展。2000年,E-Ink与美国朗讯科技公司合作,成功开发出第一张可卷曲的电子纸和电子墨。随后,在2001年,E-Ink与日本Toppan Printing公司合作,利用Toppan的滤镜技术生产出了彩色电子纸,这是电子纸技术的一大突破。
American Electric公司的发展小趣事

随着技术的不断进步和市场的不断变化,American Electric公司意识到技术创新是保持竞争力的关键。因此,公司加大了对研发的投入,引进了一批高端技术人才,不断推出具有创新性的电力产品和服务。同时,公司还积极拓展业务,与多个大型企业建立合作关系,为其提供定制化的电力解决方案。这些举措不仅提高了公司的市场份额,还进一步提升了公司的品牌形象。

Advanced Power Solutions公司的发展小趣事

随着公司的发展,Advanced Power Solutions开始寻求与行业内其他企业的合作。通过与一家知名电子设备制造商建立战略合作关系,公司成功将其电源管理解决方案集成到对方的产品中。这一合作不仅扩大了公司的市场份额,也提高了公司的品牌知名度。此后,公司陆续与多家企业建立了合作关系,进一步巩固了其在行业内的地位。

问答坊 | AI 解惑

检测绝缘栅极双极型晶体管(IGBT)好坏的简易方法

1、判断极性首先将万用表拨在R×1KΩ挡,用万用表测量时,若某一极与其它两极阻值为无穷大,调换表笔后该极与其它两极的阻值仍为无穷大,则判断此极为栅极(G)。其余两极再用万用表测量,若测得阻值为无穷大,调换表笔后测量阻值较小。在测量阻值 ...…

查看全部问答>

请教PB->Platform->Settings->Enable full Kernel Mode

如题:PB->Platform->Settings->Enable full Kernel Mode(no IMGNOTALLKMODE=1) 以前的工程一直选择这个选项,从来没想过是做什么的 前两天新做个工程,忘记加这个选项,编译后系统不报错,但是下到板子上,系统好象缺少explore.exe一样 后来 ...…

查看全部问答>

很奇怪的问题 wince 串口测试应用程序 writefile(...)函数没有执行完就失败了,然后程序死掉了。

串口测试的writefile(...)函数没有执行完就失败了,没有任何返回结果。writefile的下一个语句做断点,没有执行到。 if(hComm!=INVALID_HANDLE_VALUE&&dwCharToWrite!=0)         {           &nbs ...…

查看全部问答>

关于nk.bin :error opening file -no such file or directory问题

大家好。我现在在虚拟机上建立Wince系统。建立了虚拟机以后。使用USBoot将U盘以HDD(ZIP也试过)模式格式化为引导盘,将C:\\Program Files\\Microsoft Platform Builder\\6.00\\cepb\\utilities下的CepcBoot.144文件放入WinImage软件中并选择U盘,利 ...…

查看全部问答>

终于研发成功

终于研发成功,cpu是s3c2410,64M   SDRAM,网口为cs8900 flash(k9f1208 64m)   实现了只用nand flash 就可以启动引导vxworks. 公司送bsp及全套开发文档 ,另可配公司的开发板 有意着QQ联系641328010 请注明 arm…

查看全部问答>

STC12LE5206AD 程序将引脚置为0 却检测到为高

有谁能够帮忙解决下啊? 本人qq:853887107…

查看全部问答>

RT_THREAD中的异常与中断

  异常是导致处理器脱离正常运行转向执行特殊代码的任何事件,如果系统不及时处理,系统轻则出错,重着导致系统毁灭性的瘫痪。所以正确地处理异常避免错误的发生是提高软件的鲁棒性重要的一方面,对于嵌入式系统更加如此。 异常可以分成两类 ...…

查看全部问答>

11.06【每周讨论】软文——春风化雨、润物无声

您知道“软文”的含义吗?什么,不知道。赶紧百度一下吧,别被OUT了 [ 本帖最后由 longxtianya 于 2011-11-6 20:19 编辑 ]…

查看全部问答>

分享一些收集的msp430方面的书籍

最近接触了一下msp430的单片机从网上搜集了一些书籍希望对大家有帮助。…

查看全部问答>

泰克2012年度春季创新论坛北京站见闻

    4月24日阴雨天气,阿牛哥上午9点去北京朝阳区五洲皇冠大酒店参加泰克2012年度春季创新论坛。热情的工程师们朋友已经在会场里聆听泰克的测试测量行业趋势观点,泰克领先测试测量方案,还有一些工程师朋友在展厅参观泰克最新 ...…

查看全部问答>