在学习STM32时发现在初始化外设前必须先进行RCC的时钟初始化,否则将无法正常配置外设功能。
1.如下图所示完GPIO后再开启RCC外设时钟,无法正常点亮LED。
void RGB_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = RGB_R_PIN | RGB_G_PIN | RGB_B_PIN;
GPIO_Init(RGB_PORT,&GPIO_InitStructure);
/*初始化完外设后再使能RCC时钟程序运行结果异常*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RGB_R_OFF;
RGB_G_OFF;
RGB_B_OFF;
}
2.如下图所示先开启RCC时钟,再对相应的GPIO进行初始化,能够正常点亮LED。
void RGB_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*在初始化所用外设之前必须先使能对应外设的总线时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = RGB_R_PIN | RGB_G_PIN | RGB_B_PIN;
GPIO_Init(RGB_PORT,&GPIO_InitStructure);
RGB_R_OFF;
RGB_G_OFF;
RGB_B_OFF;
}