TA的每日心情  | 开心 2019-11-19 11:07 | 
|---|
 
  签到天数: 226 天 连续签到: 1 天 [LV.7]常住居民III 
举人 
 
 
	- 积分
 - 747
 
 
 
 
 | 
 
 
 本帖最后由 zhjb1 于 2017-5-26 17:01 编辑  
 
结果多次尝试最后在几个实例的帮助下解决了,直接上代码了。首先在文档头中间变量定义: 
uint16_t dut0=1200,dut1=2000,dut2=5000; 
int ddut0=1000,ddut1=2000,ddut2=2500; 
接着在ioInit()函数中增加Timer1的IO定义: 
//enable timer1 clock 
 rcu_periph_clock_enable(RCU_TIMER1); 
 rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4); 
 adc_clock_config(ADC_ADCCK_PCLK2_DIV4);//config ADC clock 
//enable GPIOB 
 rcu_periph_clock_enable(RCU_GPIOB); 
//configure PB3(TIMER1 CH1,CH2,CH3) as alternate function 
 gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_3); 
 gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3); 
 gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_3); 
 gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10); 
 gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_10); 
 gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_10); 
 gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_11); 
 gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_11); 
 gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_11); 
之后第一Timer1初始化函数,系统时钟是120MHz,以下是按照此来计算的: 
//configure the TIMER peripheral 
void timeInit(void){ 
 timer_parameter_struct timer_initpara; 
 timer_oc_parameter_struct timer_ocintpara; 
 rcu_periph_clock_enable(RCU_TIMER1); 
//TIMER1  configuration 
 timer_deinit(TIMER1); 
//TIMER1 configuration 
 timer_initpara.prescaler         = 119; 
 timer_initpara.alignedmode       = TIMER_COUNTER_EDGE; 
 timer_initpara.counterdirection  = TIMER_COUNTER_UP; 
 timer_initpara.period            = 11999; 
 timer_initpara.clockdivision     = TIMER_CKDIV_DIV1; 
 timer_initpara.repetitioncounter = 0; 
 timer_init(TIMER1,&timer_initpara); 
//CH1,CH2 and CH3 configuration in PWM mode 
 timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH; 
 timer_ocintpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW; 
 timer_ocintpara.outputstate = TIMER_CCX_ENABLE; 
 timer_channel_output_config(TIMER1,TIMER_CH_1,&timer_ocintpara); 
 timer_channel_output_config(TIMER1,TIMER_CH_2,&timer_ocintpara); 
 timer_channel_output_config(TIMER1,TIMER_CH_3,&timer_ocintpara); 
 timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_1,ddut0); 
 timer_channel_output_mode_config(TIMER1,TIMER_CH_1,TIMER_OC_MODE_PWM0); 
 timer_channel_output_shadow_config(TIMER1,TIMER_CH_1,TIMER_OC_SHADOW_DISABLE); 
 timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_2,ddut1); 
 timer_channel_output_mode_config(TIMER1,TIMER_CH_2,TIMER_OC_MODE_PWM0); 
 timer_channel_output_shadow_config(TIMER1,TIMER_CH_2,TIMER_OC_SHADOW_DISABLE); 
 timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_3,ddut2); 
 timer_channel_output_mode_config(TIMER1,TIMER_CH_3,TIMER_OC_MODE_PWM0); 
 timer_channel_output_shadow_config(TIMER1,TIMER_CH_3,TIMER_OC_SHADOW_DISABLE); 
//auto-reload preload enable 
 timer_auto_reload_shadow_enable(TIMER1); 
 timer_enable(TIMER1); 
} 
之后再main主函数前边加上Timer初始化函数调用: 
timeInit(); 
在循环系while中添加改变PWM周期的算法和重写语句: 
if(dut0>10000) ddut0=-100;if(dut0<200) ddut0=100;dut0 +=ddut0; 
if(dut1>8000) ddut1=-100;if(dut1<200) ddut1=100;dut1 +=ddut1; 
if(dut2>15000) ddut2=-150;if(dut2<200) ddut2=150;dut2 +=ddut2; 
timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_1,dut0); 
timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_2,dut1); 
timer_channel_output_pulse_value_config(TIMER1,TIMER_CH_3,dut2); 
最后在dispBase()和dispMes()函数中增加显示PWM周期的时间就OK了。硬件连接见照片41,示波器采样3路PWM之1路的波形见照片42,串口显示计数器+ADC+3路PWM数据见图43。 
忘了说明了,我的所有实验是基于GPIO_LED实例的。  
 
 |   
	
 
  
  
  
 
 
 |