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

通用外设驱动模型(四步法)

在这里插入图片描述

举例:GPIO配置步骤

1、使能时钟
__HAL_RCC_GPIOx_CLK_ENABLE()
2、设置工作模式
HAL_GPIO_Init()
3、设置输出状态(可选)
HAL_GPIO_WritePin() 
HAL_GPIO_TogglePin()
4、读取输入状态(可选)
HAL_GPIO_ReadPin()

在这里插入图片描述

模块化编程

led.h

#ifndef _LED_H
#define _LED_H
#include "./SYSTEM/sys/sys.h"/******************************************************************************************/
/* 引脚定义 */#define LED0_GPIO_PORT                  GPIOB
#define LED0_GPIO_PIN                   GPIO_PIN_5
#define LED0_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)             /* PB使能时钟 */#define LED1_GPIO_PORT                  GPIOE
#define LED1_GPIO_PIN                   GPIO_PIN_5
#define LED1_GPIO_CLK_ENABLE()          do{ __HAL_RCC_GPIOE_CLK_ENABLE(); }while(0)             /* PE使能时钟 *//******************************************************************************************/
/* LED端口定义 */
#define LED0(x)   do{ x ? \HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_SET) : \HAL_GPIO_WritePin(LED0_GPIO_PORT, LED0_GPIO_PIN, GPIO_PIN_RESET); \}while(0)      /* LED0翻转 */#define LED1(x)   do{ x ? \HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_SET) : \HAL_GPIO_WritePin(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_PIN_RESET); \}while(0)      /* LED1翻转 *//* LED取反函数定义 */
#define LED0_TOGGLE()   do{ HAL_GPIO_TogglePin(LED0_GPIO_PORT, LED0_GPIO_PIN); }while(0)        /* 翻转LED0 */
#define LED1_TOGGLE()   do{ HAL_GPIO_TogglePin(LED1_GPIO_PORT, LED1_GPIO_PIN); }while(0)        /* 翻转LED1 *//******************************************************************************************/
/* 外部接口函数*/
void led_init(void);                                                                            /* 初始化接口 */#endif

led.c

#include "./BSP/LED/led.h"/*** @brief       初始化LED相关IO口, 并使能时钟* @param       无* @retval      无*/
void led_init(void)
{GPIO_InitTypeDef gpio_init_struct;LED0_GPIO_CLK_ENABLE();                                 /* LED0时钟使能 */LED1_GPIO_CLK_ENABLE();                                 /* LED1时钟使能 */gpio_init_struct.Pin = LED0_GPIO_PIN;                   /* LED0引脚 */gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */gpio_init_struct.Pull = GPIO_PULLUP;                    /* 上拉 */gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */HAL_GPIO_Init(LED0_GPIO_PORT, &gpio_init_struct);       /* 初始化LED0引脚 */gpio_init_struct.Pin = LED1_GPIO_PIN;                   /* LED1引脚 */HAL_GPIO_Init(LED1_GPIO_PORT, &gpio_init_struct);       /* 初始化LED1引脚 */LED0(1);                                                /* 关闭 LED0 */LED1(1);                                                /* 关闭 LED1 */
}

mian.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"int main(void)
{HAL_Init();                                 /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9);         /* 设置时钟,72M */delay_init(72);                             /* 初始化延时函数 */led_init();                                 /* 初始化LED */while(1){LED0(0);                                /* LED0 亮 */LED1(1);                                /* LED1 灭 */delay_ms(500);LED0(1);                                /* LED0 灭 */LED1(0);                                /* LED1 亮 */delay_ms(500);}
}
http://www.xdnf.cn/news/351181.html

相关文章:

  • 探索大型语言模型的 LLM 安全风险和 OWASP 十大漏洞
  • (x ^ 2 + 2y − 1) ^ 3 − x ^ 2 * y ^ 3 = 1
  • React Native 前瞻式重大更新 Skia WebGPU ThreeJS,未来可期
  • AI客服问答自动生成文章(基于deepseek实现)
  • JAVA简单例题+抽象+继承
  • openssl中BIO的使用
  • PostgreSQL创建只读账号
  • 数据中台建设系列(五):SQL2API驱动的数据共享与服务化实践
  • 游戏引擎学习第266天:添加顶部时钟概览视图。
  • TensorFlow深度学习实战(15)——编码器-解码器架构
  • 可视化图解算法36: 序列化二叉树-I(二叉树序列化与反序列化)
  • 用 Java 实现 哲学家就餐问题
  • 数字信号处理|| 离散序列的基本运算
  • IPv6协议
  • 基于Transformer与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
  • 英文单词 do、play、go 的区别
  • 大模型的RAG技术系列(二)
  • ADV7842KBCZ - 5 富利威长期稳定供应
  • MLX-Audio:高效音频合成的新时代利器
  • 【图片识别内容改名】图片指定区域OCR识别并自动重命名,批量提取图片指定内容并重命名,基于WPF和阿里云OCR识别的解决
  • wpf UserControl 更换 自定义基类
  • 三款实用电脑工具
  • 【CTFSHOW_Web入门】命令执行
  • K8S - GitLab CI 自动化构建镜像入门
  • 按位宽提取十六进制值
  • OpenCV的 ccalib 模块用于自定义标定板的检测和处理类cv::ccalib::CustomPattern()----函数calibrate
  • uniapp开发的项目上传到国内主流应用市场(华为、小米、oppo、vivo)
  • COLT_CMDB_aix_diskinfo.sh
  • OCCT中的基础变换
  • C++卡特兰数讲解