Sí, puede cambiar la velocidad de reloj del PIC32MX dinámicamente.
La forma más sencilla es utilizar la llamada OSCConfig en las bibliotecas periféricas PIC32, ya que cambia el reloj temporalmente al modo FRC antes de volver a uno de los otros modos de reloj, incluido el PLL. Por lo tanto, no tiene que cambiar explícitamente al modo FRC primero, como tendría que hacerlo si estuviera escribiendo directamente en los campos del modo de reloj. Sin embargo, debe desactivar las interrupciones alrededor de la llamada.
Aquí hay un ejemplo:
#include <p32xxxx.h>
#include <plib.h>
.
.
.
INTDisableInterrupts();
OSCConfig(OSC_POSC_PLL, OSC_PLL_MULT_15, OSC_PLL_POST_1, 0);
INTEnableInterrupts();
Las diversas constantes se enumeran en la documentación de la llamada OSCConfig.
¡Peligro, Will Robinson! El ejemplo de código que muestra Microchip en su documentación es incorrecto, por lo tanto, si corta y pega desde la documentación, ¡no se compilará! El ejemplo utiliza OscConfig en lugar de OSCConfig. Este último se utiliza correctamente en el resto de su documentación.
Encontré que la documentación de las bibliotecas periféricas PIC32 está en este documento . Curiosamente, no pude encontrar el PDF en el sitio de Microchip. Hay un archivo de ayuda compilado con la misma información en la carpeta Microchip \ MPLAB C32 Suite \ doc, pero me gusta más el PDF.
No tiene que instalar nada para usar su biblioteca periférica, ya que viene con el compilador PIC32. NOTA: Estoy usando un compilador anterior, pic32-gcc.exe v2.01, por lo que es posible que la llamada haya cambiado, pero dudo que sea compatible con el código anterior.