Stm32 Hal库点亮Led程序

一、GPIO 工作模式

GPIO_Mode_AIN = 0x0, // 模拟输入GPIO_Mode_IN_FLOATING = 0x04, //浮空输入GPIO_Mode_IPD = 0x28, // 下拉输入GPIO_Mode_IPU = 0x48, // 上拉输入GPIO_Mode_Out_OD = 0x14, // 开漏输出GPIO_Mode_Out_PP = 0x10, // 推挽输出GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出GPIO_Mode_AF_PP = 0x18 // 复用推挽输出

1.1 输入模式 (模拟/浮空/上拉/下拉)

        在输入模式时,施密特触发器打开,输出被禁止,可通过输入数据寄存器 GPIOx_IDR 读取 I/O 状态。其中输入模式,可设置为上拉、下拉、浮空和模拟输入四种。上拉和下拉输入很好理解,默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外部的输入决定,一般接按键的时候用的是这个模式。模拟输入则用于 ADC 采集。

1.2 输出模式 (推挽/开漏)

        在输出模式中,推挽模式时双 MOS 管以轮流方式工作,输出数据寄存器 GPIOx_ODR 可控制 I/O输出高低电平。开漏模式时,只有 N-MOS 管工作,输出数据寄存器可控制 I/O 输出高阻态或低电平。输出速度可配置,有 2MHz10MHz50MHz 的选项。此处的输出速度即 I/O 支持的高低电平状态最高切换频率,支持的频率越高,功耗越大,如果功耗要求不严格,把速度设置成最大即可。

        在输出模式时施密特触发器是打开的,即输入可用,通过输入数据寄存器 GPIOx_IDR 可读取 I/O的实际状态。

1.3 复用功能 (推挽/开漏)

        复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出信号源于其它外设,输出数据寄存器 GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号。

        通过对 GPIO 寄存器写入不同的参数,就可以改变 GPIO 的工作模式,再强调一下,要了解具体寄存器时一定要查阅《STM32F10X-中文参考手册》中对应外设的寄存器说明。在 GPIO 外设中,控制端口高低控制寄存器 CRH 和 CRL 可以配置每个 GPIO 的工作模式和工作的速度,每 4 个位控制一个 IO,CRH 控制端口的高八位,CRL 控制端口的低 8 位,具体的看 CRH 和 CRL 的寄存器描述。

二、使用hal库点亮LED

LED           STM32

LED1--------PB0

LED2--------PB1

LED3--------PB5

        任一LED即可,不必须要RGB灯。这是一个 RGB 灯,里面由红蓝绿三个小灯构成,使用 PWM 控制时可以混合成 256*256*256 种不同的颜色。

f811a8b3d2124606add861b9a1832c58.jpg

/* 初始化LED-------- */

/*Configure GPIO pins : PB0 PB1 PB5 */  

GPIO_InitTypeDef GPIO_InitStruct = {0};

__HAL_RCC_GPIOB_CLK_ENABLE();

GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5;  

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP  

GPIO_InitStruct.Pull = GPIO_NOPULL; 

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;  

HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

 

/*Configure GPIO pin Output Level */  

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_5, GPIO_PIN_SET);

 

/* ----main.c---- */

//红灯    

GPIOB->BSRR=(uint32_t)GPIO_PIN_5 << 16; 

GPIOB->BSRR=GPIO_PIN_0;    

GPIOB->BSRR=GPIO_PIN_1;    

HAL_Delay(1000);

//绿灯

GPIOB->BSRR=GPIO_PIN_5;

GPIOB->BSRR=(uint32_t)GPIO_PIN_0 << 16; 

GPIOB->BSRR=GPIO_PIN_1;        

HAL_Delay(1000);    

//蓝灯

GPIOB->BSRR=GPIO_PIN_5;    

GPIOB->BSRR=GPIO_PIN_0;        

GPIOB->BSRR=(uint32_t)GPIO_PIN_1 << 16;    

HAL_Delay(1000);        

//黄灯

GPIOB->BSRR=(uint32_t)GPIO_PIN_5 << 16;

GPIOB->BSRR=(uint32_t)GPIO_PIN_0 << 16;    

GPIOB->BSRR=GPIO_PIN_1;        

HAL_Delay(1000);            

//紫灯    

GPIOB->BSRR=(uint32_t)GPIO_PIN_5 << 16;    

GPIOB->BSRR=(uint32_t)GPIO_PIN_1 << 16;    

GPIOB->BSRR=GPIO_PIN_0;    

HAL_Delay(1000);    

//青灯    

GPIOB->BSRR=(uint32_t)GPIO_PIN_0 << 16;    

GPIOB->BSRR=(uint32_t)GPIO_PIN_1 << 16;

GPIOB->BSRR=GPIO_PIN_5;        

HAL_Delay(1000);

//白灯    

GPIOB->BSRR=(uint32_t)GPIO_PIN_5 << 16;    

GPIOB->BSRR=(uint32_t)GPIO_PIN_0 << 16;    

GPIOB->BSRR=(uint32_t)GPIO_PIN_1 << 16;    

HAL_Delay(1000);

//黑灯        

GPIOB->BSRR=GPIO_PIN_5;     

GPIOB->BSRR=GPIO_PIN_1;        

GPIOB->BSRR=GPIO_PIN_0;            

HAL_Delay(1000);

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式冰箱

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值