假设i8T1=-5 //0xFB
i8T2=1 //0x01
u16x=i8T1;
u16x <<=8; //0xFB00
u16x |=i8T2 //
理想值 u16x=0xFB01 ,实际值 u16x=0xFF01
因为u16x |=i8T2 运算中 i8T2 被转换为0xFF01 再| u16x 0xFB00时候所以就变为0xFF01
正确应该写为u16x |=((uint16_t )i8T2&0x00FF) //
2 设备初始化得时候一定记得将局部变量得结构体清0,不然多次调用后肯定会出现配置错误。void HeatPWMconfigTimer16(void)
{
HeatPWMGpioconfig();
timer_oc_parameter_struct timer_ocintpara;
timer_parameter_struct timer_initpara;
memset(&timer_ocintpara,0,sizeof(timer_oc_parameter_struct));
memset(&timer_initpara,0,sizeof(timer_parameter_struct));
rcu_periph_clock_enable(RCU_TIMER16);
timer_deinit(TIMER16);
timer_initpara.prescaler = 47;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = PWM_MAX_DUTY-1;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER16,&timer_initpara);
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
timer_channel_output_config(TIMER16, TIMER_CH_0, &timer_ocintpara);
timer_channel_output_pulse_value_config(TIMER16, TIMER_CH_0, 1);
timer_channel_output_mode_config(TIMER16, TIMER_CH_0, TIMER_OC_MODE_PWM0);
timer_channel_output_shadow_config(TIMER16, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);
timer_primary_output_config(TIMER16,ENABLE);
timer_auto_reload_shadow_enable(TIMER16);
timer_enable(TIMER16);
}



