先 使能外设时钟 再 初始化IO口


 

  • 使能IO口时钟。调用函数RCC_APB2PeriphColckCmd();

 

  • 初始化IO口模式。调用函数GPIO_Init();

 

  • 操作IO口,输出高低电平。

 

序不能反,解释:

   ARM的芯片,外设通常都是给了时钟后才能设置它的寄存器(即才能使用这个外设)。STM32、LPC1XXX等等都是这样,这么做的目的是为了省电,使用了所谓时钟门控的技术。寄存器是基于触发器的,触发器的赋值是一定需要时钟的,而寄存器的时钟是由总线时钟提供的,就是说没有总线时钟的话,你给寄存器值它是不会读入的。

e.g.

 1 void LED_init()
 2 {
 3     GPIO_InitTypeDef GPIO_InitStructure;//类似变量声明,需要放在最前面
 4     
 5     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOB, ENABLE);//不能放在后面
 6     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
 7     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 8     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 9         
10     GPIO_Init(GPIOB, &GPIO_InitStructure);
11     GPIO_Init(GPIOE, &GPIO_InitStructure);
12     
13     //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOB, ENABLE);//此处出错
14     GPIO_SetBits(GPIOB, GPIO_Pin_5);
15     GPIO_SetBits(GPIOE, GPIO_Pin_5);
16 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM