El código que planeaba usar es:
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx.h"
#include "stm32f4xx_spi.h"
void initializeGreenLed(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD,&GPIO_InitStructure);
}
int main(void)
{
//RCC_CFGR;
initializeGreenLed();
//initialiseSysTick();
GPIO_SetBits(GPIOD,GPIO_Pin_12);
while(1)
{
GPIO_ToggleBits(GPIOD,GPIO_Pin_12);
}
}
La frecuencia máxima de conmutación de pines que obtengo es de alrededor de 230 KHz. Como la MCU se puede ejecutar a 84 MHz, tengo la sensación de , de que es posible aumentar la frecuencia máxima de conmutación más allá de 230 KHz.
Así que pensé que necesito cambiar / modificar la fuente del reloj paraRCC_AHB1Periph_GPIOD
en RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
. Para eso utilicé el manual de referencia STM32 F4. AsíqueelplanerausarPLLCLKcomoSYSCLK.ElPLLCLKseobtendríade8MHzHSE.Navegandopor
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx.h"
#include "stm32f4xx_flash.h"
void initializeGreenLed(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOD,&GPIO_InitStructure);
}
int main() {
//---------------------------down is clc stuff---------------------------
RCC_DeInit();
ErrorStatus Errsts;
RCC_HSEConfig(RCC_HSE_ON);
Errsts = RCC_WaitForHSEStartUp();
if (Errsts == SUCCESS) {
//external clc is ok
RCC_PLLConfig(RCC_PLLSource_HSI, 8, 336, 2, 7);
RCC_PLLCmd(ENABLE);
RCC_GetFlagStatus(RCC_FLAG_PLLRDY == RESET);
FLASH_SetLatency(FLASH_Latency_5);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div4);
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
initializeGreenLed();
while(1){
GPIO_SetBits(GPIOD,GPIO_Pin_12);
}
}
else {
//External clc no ready
while(1);
}
}
Pero no funciona, ya que solo permanece en un estado.
Así que tengo dos preguntas:- ¿Por qué no funciona mi código?
- Si mi estrategia mencionada anteriormente es incorrecta, ¿cómo aumentar la frecuencia de conmutación más allá de 230 KHz?