STM32程序解读,这段程序什么意思啊 能给我解释一下么 5
#include"led.h"voidled_init(void)RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE|RCC_AHB1...
#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;
}
} 展开
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;
}
} 展开
意法半导体(中国)投资有限公司
2023-06-12
展开全部
展开全部
这是初始化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都是按照上次的配置执行的。所以端口的模式我们也是有必要进行初始化的。
先把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都是按照上次的配置执行的。所以端口的模式我们也是有必要进行初始化的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一款广泛应用于消费类电子、汽车、工业和物联网领域的低功耗嵌入式系统芯片。ST公司推出了多个STM32系列,以满足不同应用需求。以下是ST公司主要的STM32系列:1. STM32WB系列:这是ST公司推出的第一款支持2.4GHz...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询