-
gd32E定时器频率动态更新的问题 sos
[i=s] 本帖最后由 wahaha95 于 2022-10-5 20:01 编辑 [/i] [color=#000][font=Tahoma, Arial, Helvetica, snas-serif][size=14px] [/size][/font][/color][color=#000][font=Tahoma, Arial, Helvetica, snas-serif][size=14px]你好,我使用gd32E503要实现两路pwm功能,要求载波相位错开180度,频率可动态设置。[/size][/font][/color][color=#000][font=Tahoma, Arial, Helvetica, snas-serif][size=14px] 我使用timer0和timer7采用 增计数模式 实现,tim0和tim7都设置car和ch0cv的影子寄存器开启,tim7使用ch3比较事件触发dma,当ch3比较事件发生时,dma往tim0的swevg里写入0x01,即触发up事件,使得tim0复位cnt值,且更新car和ch0cv,以此来实现相位动态变化。[/size][/font][/color] [color=#000][font=Tahoma, Arial, Helvetica, snas-serif][size=14px] 测试使用25kHz定时器任务周期,同时更新tim0和tim7的car与ch0cv,每个周期100kH与200kHz来回变化。实际波形大部分时间相位和频率正确,但是偶尔会出现 频率不一致的情况。思考的很多天没理解为啥 同一时刻更新的car,但是实际会出现周期错位的情况。[/size][/font][/color] [color=#000][font=Tahoma, Arial, Helvetica, snas-serif][size=14px] 请问这是什么原因呢?[/size][/font][/color] [color=#000][/color]
1320浏览量 0回复量 关注量 -
请教新唐M483SIDAE这款芯片的定时器问题
[img]file:///C:/Users/admin%E3%80%81/Desktop/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202021-09-27%20103333.png[/img]使用TIMER_OPEN(TIMER0,TIMER_PERIODIC_MODE,1); 函数代表初始化TIMER0,周期性模式,每一秒进一次中断,这个1s可否直接更改为1us,或者1ms,如果可以 是否是说要更改预分频与比较寄存器的值来更改,这个1不用动;还是说有其他办法直接修改
5563浏览量 1回复量 关注量 -
GD32F305VG timer0输入捕获无反应
各位大佬好! 我按照GD32F30x的标准库配置了GD32F305VG 的timer0定时器并开启了输入捕获功能,配置代码如下: void timer_config(void) { /* ----------------------------------------------------------------------- timer_parameter_struct timer_initpara; timer_ic_parameter_struct timer_icinitpara; rcu_periph_clock_enable(RCU_TIMER0); timer_deinit(TIMER0); /*NVIC config*/ nvic_irq_enable(TIMER0_UP_TIMER9_IRQn, 1, 1); nvic_irq_enable(TIMER0_Channel_IRQn, 1, 0); /* TIMER0 configuration */ timer_initpara.prescaler = 119; timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 999; timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_initpara.repetitioncounter = 0; timer_init(TIMER0, &timer_initpara); timer_icinitpara.icpolarity = TIMER_IC_POLARITY_RISING; timer_icinitpara.icselection = TIMER_IC_SELECTION_DIRECTTI; timer_icinitpara.icprescaler = TIMER_IC_PSC_DIV1; timer_icinitpara.icfilter = 0x0; timer_input_capture_config(TIMER0, TIMER_CH_0, &timer_icinitpara); timer_input_capture_config(TIMER0, TIMER_CH_3, &timer_icinitpara); /* auto-reload preload enable */ timer_auto_reload_shadow_enable(TIMER0); timer_interrupt_flag_clear(TIMER0,TIMER_INT_FLAG_CH0); timer_interrupt_flag_clear(TIMER0,TIMER_INT_FLAG_CH3); timer_interrupt_enable(TIMER0,TIMER_INT_CH0); timer_interrupt_enable(TIMER0,TIMER_INT_CH3); timer_interrupt_enable(TIMER0,TIMER_INT_UP); timer_enable(TIMER0); } /*中断服务程序*/ void TIMER0_UP_TIMER9_IRQHandler(void) { if ( timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_UP) != RESET ) { timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP); timer0tick++; } } void TIMER0_Channel_IRQHandler() { if ( timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_CH0) != RESET) { timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_CH0); } else if (timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_CH3) != RESET){ timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_CH3); rcvcnt++; } } TIMER0 CH0和CH3的GPIO口确定可以正常检测到高低电平,然而软件在运行中,只有更新中断是正常的,输入捕获中断一直触发不了,不知道各位大佬们是否有遇到过此类问题,恳请指点一二,感谢!
3841浏览量 15回复量 关注量