STM32程序解读,这段程序什么意思啊 能给我解释一下么

#include "led.h"

void led_init(void)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOG, ENABLE);

GPIOE_MODER &= ~((3 << 6) | (3 << 8));
GPIOE_MODER |= ((1 << 6) | (1 << 8));
GPIOE_OTYPER &= ~((1 << 3) | (1 << 4));
GPIOE_OSPEEDR &= ~((3 << 6) | (3 << 8));
GPIOE_OSPEEDR |= ((2 << 6) | (2 << 8));
GPIOE_PUPDR &= ~((3 << 6) | (3 << 8));
GPIOE_ODR |= ((1 << 3) | (1 << 4));

GPIOG_MODER &= ~(3 << 18);
GPIOG_MODER |= (1 << 18);
GPIOG_OTYPER &= ~(1 << 9);
GPIOG_OSPEEDR &= ~(3 << 18);
GPIOG_OSPEEDR |= (2 << 18);
GPIOG_PUPDR &= ~(3 << 18);
GPIOG_ODR |= (1 << 9);
}

void led_on(int nu)
{
switch(nu)
{
case 0: GPIOG_ODR &= ~(1 << 9); break;
case 1: GPIOE_ODR &= ~(1 << 4); break;
case 2: GPIOE_ODR &= ~(1 << 3); break;
}
}

void led_off(int nu)
{
switch(nu)
{
case 0: GPIOG_ODR |= (1 << 9); break;
case 1: GPIOE_ODR |= (1 << 4); break;
case 2: GPIOE_ODR |= (1 << 3); break;
}
}

第1个回答  2017-12-02
这是初始化GPIO的做法。

先把A口的时钟使能,再将其失能。这样A口就不能用了。

通常我们初始化也会这么写:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
|RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD ,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
|RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , DISABLE);

比你的句子多一个端口模式的配置 。
在keil Debug时你会从GPIO的寄存器看到,没有用到的IO都是这里初始化设置的模式。可见在你再次改动配置之前,IO都是按照上次的配置执行的。所以端口的模式我们也是有必要进行初始化的。本回答被网友采纳
相似回答