Operación de byte de opción de salida PWM multicanal TIM1 (byte de opción) y multiplexación de E/S
Este artículo está extraído de: https://blog.csdn.net/freeape/article/details/47008033 Es solo para aprender a respaldar y no hay intención de plagio. Si tiene alguna duda, ¡contácteme!
El código debe usar TIME1 para generar PWM de 3 vías, el código es el siguiente:
void timer1_init(void)
{
TIM1_DeInit();
TIM1_TimeBaseInit(0x0000, TIM1_COUNTERMODE_UP, 1600, 0x00);//16000000/160=10000=10K
TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,400, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH,TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);
TIM1_OC2Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,800, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH,TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);
TIM1_OC3Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,TIM1_OUTPUTNSTATE_DISABLE,1200, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH,TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);
TIM1_Cmd(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE);
}
Pero no sé por qué no hay salida del canal 1 y el canal 2, solo el canal 3 tiene salida:
después de consultar con Baidu, finalmente vi este artículo: https://blog.csdn.net/freeape/article/details /47008033
Debe configurar AFR0. Después de saber que necesita usar stvp para modificar el byte de opción: https://download.csdn.net/download/rui22/12885187
Después de que la operación sea exitosa, puede volver a leer la configuración para ver si tiene éxito:
después de la configuración, el canal 1 y el canal 2 finalmente tienen salida PWM: