完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
正在用STM32F103RB帮别人做个信号 发生器的毕业设计,用定时器1输出脉冲个数可控制的功能,但在用定时器的过程中,发现两个问题1)写1到UG时,输出CH1管脚电平会发生变化,测试了一天,实在百思不得其解,原来用通用定时器(2、3、4)都没问题;
2)写1到UG时,预载寄存器好像没有起作用,导致丢掉了第一个脉冲;如下代码应该是输出4个脉冲,实际只输出3个; 请各位大侠指点,附原码如下,管脚用作定时器输出已设置。 tiM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = 9000; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性 TIM_OC1Init(TIM1, &TIM_OCInitStructure); //初始化外设TIMx TIM1->BDTR=0x8800; TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器 TIM1->CR2=0; TIM1->RCR=0; //第1个脉冲参数 TIM1->PSC = (u16)PlusMode0Psc[0]; //预分步器 TIM_SetAutoreload(TIM1, (u16)PlusMode0Period[0]); //周期 TIM_SetCompare1(TIM1,(u16)PlusMode0Width[0]); //这里时间间隔做占空比 TIM_GenerateEvent(TIM1,TIM_EventSource_Update); //初始化预装载 //第2个脉冲参数 TIM1->PSC = (u16)PlusMode0Psc[1]; //预分步器 TIM_SetAutoreload(TIM1, (u16)PlusMode0Period[1]); //周期 TIM_SetCompare1(TIM1,(u16)PlusMode0Width[1]); //这里时间间隔做占空比 TIM1->CR1 |= TIM_CR1_CEN; //第3个脉冲参数 while(!(TIM_FLAG_Update&TIM1->SR)) {; } TIM1->ARR = PlusMode0Period[2]; TIM1->CCR1 = PlusMode0Width[2]; TIM1->SR = 0; //TIM1->PSC = PlusMode0Psc[2]; //第4个脉冲参数 while(!(TIM_FLAG_Update&TIM1->SR)) {; } TIM1->ARR = PlusMode0Period[3]; TIM1->CCR1 = PlusMode0Width[3]; TIM1->SR = 0; TIM1->PSC = PlusMode0Psc[3]; //第3个脉冲完成 while(!(TIM_FLAG_Update&TIM1->SR)) {; } TIM1->SR = 0; //第4个脉冲完成,翻转后禁止输出 while(!(TIM_FLAG_CC1&TIM1->SR)) {; } TIM1->CR1 =0x0080; TIM1->SR = 0; |
|
相关推荐
6个回答
|
|
|
|
|
|
|
|
|
|
本帖最后由 wenyangzeng 于 2018-3-14 09:59 编辑
楼主在TIM配置中不断改变定时器参数,执行时貌似只有最后一个参数起作用。建议使用定时器溢出中断,每次中断根据计数值改变IO输出即可。 |
|
|
|
可能是执行语句的延时导致没有输出来啊
|
|
|
|
滔滔不绝的滔滔 发表于 2018-12-25 20:30 按道理,我使用了预装载功能,应该可以放两个脉冲的数据,第一个计数完成后自动加装第二个脉冲数据到计数器,不知道这样理解对不对 |
|
|
|
因为涉及到脉冲频率的问题,所以这里使用了预装载功能,应该可以一次放两个脉冲参数的吧 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1047 浏览 0 评论
2375 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2173 浏览 3 评论
4805 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2318 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 20:04 , Processed in 0.604802 second(s), Total 51, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号