找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4500|回复: 0
打印 上一主题 下一主题
收起左侧

GPIO控制流水灯的心得

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 2015-12-27 03:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    原来学习的STM32真的是太肤浅,觉得配置GPIO很简单,用GPIO控制流流水灯也不过如此,今天我自己真正配置了一遍,才知道能学习的东西有很多。
      1、stm32f10x.h 这个函数才是ST公司的库函数,平时调用的bsp_led.h是野火公司写的用户函数,所以还有写程序不易直接调用,还要自己亲自来写。
      2、首先,在main.c中,调用的头文件,必有#include "stm32f10x.h",其次就是自己写的用户函数。
      
     上面是我自己写的用户函数(PS:其实也是学来的)
        3、#ifndef __LED_H
             #define __LED_H
                .........
             #endif
             预处理,条件编译。如果第一次已经编译过了,防止重复编译的代码。
             __LED_H:这个部分写什么都无所谓,这样写就是为了易懂程序。
        4、#define LED1_OFF  LED_OFF(GPIOB,GPIO_Pin_0)
             #define LED_OFF(p,i)  {p->BSRR=i;}
             对这两句说明下,其他类似。
              其实也就是宏定义,其实也没啥,p、i。也就是上一句的GPIOB,GPIO_Pin_0.
               在stm3f10x.h里面有他的宏定义 #defineGPIOB              ((GPIO_TypeDef *) GPIOB_BASE)
                                                                #defineGPIOB_BASE           (APB2PERIPH_BASE + 0x0C00)
              在stm32f10x_gpio.h中有他们的宏定义#defineGPIO_Pin_0                ((uint16_t)0x0001)
              归根结底也就是用的寄存器操作,直接给寄存器相应的地址写值。
              这样写使代码看上去更加简洁。
        5、#define LED1(a) if(a)   \
                              GPIO_SetBits(GPIOB,GPIO_Pin_0); \
                                             else  \
                             GPIO_ResetBits(GPIOB,GPIO_Pin_0)
               这一步,宏定义,为啥每一行后边还有\呢?
                "\"用于#define中,就是表示这一行还没有结束。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表