当前位置: 首页 > article >正文

STM32 HAL 点灯

首先从点灯开始

完整函数如下:

#include "led.h"
#include "sys.h"//包含了stm32f1xx.h(包含各种寄存器定义、中断向量定义、常量定义等)


//初始化GPIO口
void led_init(void)
{
    GPIO_InitTypeDef gpio_initstruct;
    //打开时钟
    __HAL_RCC_GPIOB_CLK_ENABLE();
    //调用GPIO初始化函数
    gpio_initstruct.Pin=GPIO_PIN_8;//引脚
    gpio_initstruct.Mode=GPIO_MODE_OUTPUT_PP;//推挽输出
    gpio_initstruct.Pull=GPIO_PULLUP;//上拉输入(无所谓)
    gpio_initstruct.Speed=GPIO_SPEED_FREQ_HIGH;//高速
    HAL_GPIO_Init(GPIOB,&gpio_initstruct);
    //熄灭LED灯
    led1_off();
}

//点亮LED灯
void led1_on(void)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);
}

//熄灭LED灯
void led1_off(void)
{
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);
}

//切换LED灯的状态
void led1_toggle(void)
{
    HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
}

主函数如下:

#include "sys.h"
#include "delay.h"
#include "led.h"



int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    led_init();
    led1_on();
    while(1)
    { 
    
    }
}


在文件夹中创建一个我们需要的驱动文件

把驱动文件放在我们的项目当中

加上头文件保护宏,避免头文件被重复包含

首先明确我们的LED函数所包含的所有功能

第一步初始化GPIO口

打开时钟
在时钟库函数找到GPIO的时钟打开定义的函数,在这里我们的LED灯接在GPIOB_8上面

调用GPIO初始化函数

引脚与模式

速度

(可以关闭LED灯)

点亮LED灯

这边我们的LED的一段接的是高电平,如若要是LED亮,需要使另外一段为高电平,LED 灯导通,使其点亮

写入GPIO的函数

高低电平设置,RESET是低电平(为0),SET为高电平

下面熄灭和切换也相同

最后,我们可以加上切换函数来实现LED闪烁

当然我们需要在其中加上一个延迟函数才能实现

这样就实现了

我们也可以用另外一个操作实现LED灯的闪烁

亮——延迟——灭——延迟

同样的流水灯(这里我们用两颗LED灯进行演示)

引脚增加这里可用   |   (或)符号

LED2灯初始化直接在下面进行进行相同的操作即可

这样实现了流水灯效果

同样的,对于其他简单的元器件,比如蜂鸣器,传感器等,只需拉高或拉低就能实现相应的功能时,我们都可以进行这样类似的操作来使功能实现。


http://www.kler.cn/news/366933.html

相关文章:

  • 【有啥问啥】DINO:一种改进的去噪锚框的端到端目标检测器
  • 第二十六节 直方图均衡化
  • (done) 有服务器的权限时,如何查看服务器监听的端口?
  • 群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作
  • Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)
  • C# Unity 同步/异步编程和多线程什么关系?async/await和coroutine又是什么?
  • 【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】
  • github上传文件代码以及其它github代码
  • AppleVisionPro空间定位 三维空间重现-Unity3D
  • iOS调试真机出现的 “__llvm_profile_initialize“ 错误
  • 数据结构-队列
  • Vast.ai LLM 大语言模型使用手册(2)
  • 74. 搜索二维矩阵
  • 了解 - 微格式
  • 萤石设备视频接入平台EasyCVR私有化视频平台变电站如何实现远程集中监控?
  • Java后端面试题:Java基础篇
  • Spring微服务概述之spring cloud alibaba服务调用实践
  • 在平面模型上提取凹多边形的点云处理
  • Unity引擎:游戏开发的核心力量
  • python 深度学习 项目调试 图像分割 segment-anything
  • 微信小程序 - 动画(Animation)执行过程 / 实现过程 / 实现方式
  • RabbitMQ 发布确认高级部分
  • 语音交互:重塑人机对话的未来
  • 【Nas】X-Doc:jellyfin“该客户端与媒体不兼容,服务器未发送兼容的媒体格式”问题解决方案
  • 量子计算突破:下一个科技革命的风口浪尖在哪里?
  • Spring Boot 集成 PDFBox 实现PDF电子签章的简单应用