一、简洁版本,便于阅读,不方便移植

//led.h
#define LED1 PBout(0)
#define LED2 PBout(1)
#define LED3 PBout(5)
void LED_Init(void);//初始化//led.c
void LED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5; //PB.0.1.5 端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);                     //根据设定参数初始化GPIOB.5GPIO_SetBits(GPIOB,GPIO_Pin_0);      //GPIOB.0输出高电平               GPIO_SetBits(GPIOB,GPIO_Pin_1);        //GPIOB.1输出高电平  GPIO_SetBits(GPIOB,GPIO_Pin_5);     //GPIOB.5输出高电平
}//main.cint main(void){             HSE_SetSysClock(RCC_PLLMul_9);//SYSCLKΪ8*9=72MLED_Init();while(1){    LED1=0;LED2=1;LED3=1;}
}

如果想要修改三个LED为PA6,PA7,PA8,修改的地方如下:

二、编写更复杂,便于移植

//led.h
#define LED1_GPIO_PORT      GPIOB                       /* GPIO端口组 */
#define LED1_GPIO_CLK       RCC_APB2Periph_GPIOB        /* GPIO端口时钟 */
#define LED1_GPIO_PIN       GPIO_Pin_0                  /* GPIO端口号 */#define LED2_GPIO_PORT     GPIOB                       /* GPIO端口组 */
#define LED2_GPIO_CLK       RCC_APB2Periph_GPIOB        /* GPIO端口时钟 */
#define LED2_GPIO_PIN       GPIO_Pin_1                  /* GPIO端口号 */#define LED3_GPIO_PORT     GPIOB                       /* GPIO端口组 */
#define LED3_GPIO_CLK       RCC_APB2Periph_GPIOB        /* GPIO端口时钟 */
#define LED3_GPIO_PIN       GPIO_Pin_5                  /* GPIO端口号 */#define LED1_OFF   GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);//LED1对应GPIO输出高电平
#define LED1_ON     GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);//LED1对应GPIO输出低电平#define LED2_OFF  GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);//LED2对应GPIO输出高电平
#define LED2_ON     GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);//LED2对应GPIO输出低电平#define LED3_OFF  GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);//LED3对应GPIO输出高电平
#define LED3_ON     GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);//LED3对应GPIO输出低电平void LED_Init(void);//初始化//led.c
void LED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;//定义一个GPIO_InitTypeDef类型的结构体RCC_APB2PeriphClockCmd(LED1_GPIO_CLK|LED2_GPIO_CLK|LED3_GPIO_CLK,ENABLE);//使能LED1.2.3端口对应时钟GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;//选择LED1.2.3端口号GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //IO口速度为50MHzGPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure);                //初始化GPIOBGPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN;//选择LED1.2.3端口号GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //IO口速度为50MHzGPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure);                //初始化GPIOBGPIO_InitStructure.GPIO_Pin = LED3_GPIO_PIN;//选择LED1.2.3端口号GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //IO口速度为50MHzGPIO_Init(LED3_GPIO_PORT, &GPIO_InitStructure);                //初始化GPIOB  GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);     //LED1输出高电平              GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);        //LED2输出高电平 GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);     //LED3输出高电平
}//main.cint main(void){             HSE_SetSysClock(RCC_PLLMul_9);//SYSCLKΪ8*9=72MLED_Init();while(1){    LED1_ON;LED2_ON;LED3_ON;}
}

如果想要修改三个LED为PA6,PA7,PA8,修改的地方如下:

可以看出来第二种方式只需要修改.h文件即可,移植起来更加方便。

两种编写代码风格方式对比相关推荐

  1. C++两种编写单件模式方法对比

    1.第一种:  1 template <typename T>  2 class CSingletonT  3 {  4 public:  5   6     virtual ~CSing ...

  2. 基于ArcGIS JS API实现的两种距离和面积测量方式

    文章目录 前言 开发思路 主要代码 效果测试 效果图 测试页面 开发总结 参考链接 前言 在一些地图地图应用中,距离.面积测量属于基础功能.ArcGIS API for JavaScript有单独提供 ...

  3. 两种内存池管理方法对比

    一.问题背景 最近在调试ambiq apollo3的蓝牙时,其使用了ARM Cordio WSF的蓝牙协议栈.通过学习wsf_buf.c的实现,看到了一种不同于固定大小内存块的内存池管理方式.它使用了 ...

  4. 两种获取connectionString的方式

    两种获取connectionString的方式 1. public static string connectionString = ConfigurationManager.ConnectionSt ...

  5. Hibernate中两种获取Session的方式

    转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...

  6. 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...

    第二章计算机系统与计算原理 大学计算机基础 * 信息表示与处理 ----西文字符 ASCII 码是美国信息交换标准代码(American Standard Code for Information I ...

  7. TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable

    TF之RNN:TF的RNN中的常用的两种定义scope的方式get_variable和Variable 目录 输出结果 代码设计 输出结果 代码设计 # tensorflow中的两种定义scope(命 ...

  8. mui几种页面跳转方式对比

    mui几种页面跳转方式对比 http://blog.csdn.net/uikoo9/article/details/44676963 [几种打开页面的方式] 1.初始化时创建子页面 2.直接打开新页面 ...

  9. python代码编辑教程_python教程:pycharm编写代码的方式教学

    python可以说是新的编程语言,虽说是新编程,但一出来,就受到很长程序员的关注,而且刚出现和java进行对比,很多人就拿python和java进行比较,想python到底好不好,他和java有什么区 ...

最新文章

  1. R语言ggplot2可视化增大图例字体实战
  2. html5设置文字不能复制,网页文字不能复制?巧解网页文字不能复制
  3. Mysql中group by 使用中发现的问题
  4. oracle数据库重建em,oracle 11g em重建报唯一约束错误解决方法
  5. python3.5中文手册chm_python3.5.2官方帮助文档 参考手册(CHM版)
  6. 【Flutter】基础组件【08】BottomNavigationBar
  7. 【万恶之源~10大经典表情包出处】
  8. 百问网7天物联网智能家居 学习心得 打卡第七天
  9. 微商城分销系统开发方式需求与价格开发周期评估
  10. dw如何导入php站点,Dreamweaver CS6如何导入/导出站点?
  11. 美国白宫将探讨人工智能 概念股分析
  12. Pycharm提示No Python interpreter selected怎么解决
  13. uniapp 埋点(友盟)
  14. xp计算机远程桌面设置密码,远程桌面连接设置,详细教您xp怎么设置远程桌面连接...
  15. mediasoup transport dtls
  16. 笔记本越用越慢的解决方法。
  17. 北京10月meetup---drupal首页制作(转)
  18. 【C语言】conio.h 函数详解
  19. 微信云linux sdk下载,02.微信SDK下载及安装
  20. ubuntu 安装flash插件

热门文章

  1. trac 经验谈之(3)工作流篇
  2. C语言结构体变量 指针以及对结构体成员的访问
  3. python快速实现NPV净现值计算
  4. Android Studio——Spinner 修改字体颜色和字体大小
  5. 从孙子兵法看企业价值观和企业文化
  6. 雷观(二十五):定义和分析问题,往往比解决具体问题更重要
  7. 用 Pandas 分析均线交叉策略收益率
  8. 关于UWB(超宽带)
  9. Prioritized Experience Replay
  10. cfa专题突破网课资源