#include "stm32f10x.h"

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //DEFINE IO OUT PORT
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C //DEFINE IO IN PORT
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08 //DEFINE IO OPERATE
#define PORTA_OUT(n) BIT_ADDR(GPIOA_ODR_Addr,n) //PORTA OUT
#define PORTA_IN(n) BIT_ADDR(GPIOA_IDR_Addr,n) //PORTA IN
#define PORTB_OUT(n) BIT_ADDR(GPIOB_ODR_Addr,n) //PORTB OUT
#define PORTB_IN(n) BIT_ADDR(GPIOB_IDR_Addr,n) //PORTB IN
#define PORTC_OUT(n) BIT_ADDR(GPIOC_ODR_Addr,n) //PORTC OUT
#define PORTC_IN(n) BIT_ADDR(GPIOC_IDR_Addr,n) //PORTC IN
#define PORTD_OUT(n) BIT_ADDR(GPIOD_ODR_Addr,n) //PORTD OUT
#define PORTD_IN(n) BIT_ADDR(GPIOD_IDR_Addr,n) //PORTD IN
#define PORTE_OUT(n) BIT_ADDR(GPIOE_ODR_Addr,n) //PORTE OUT
#define PORTE_IN(n) BIT_ADDR(GPIOE_IDR_Addr,n) //PORTE IN
#define PORTF_OUT(n) BIT_ADDR(GPIOF_ODR_Addr,n) //PORTF OUT
#define PORTF_IN(n) BIT_ADDR(GPIOF_IDR_Addr,n) //PORTF IN
#define PORTG_OUT(n) BIT_ADDR(GPIOG_ODR_Addr,n) //PORTG OUT
#define PORTG_IN(n) BIT_ADDR(GPIOG_IDR_Addr,n) //PORTG IN
#define TM1637_CLK           PORTC_OUT(7)
#define TM1637_DIO PORTC_OUT(6)
#define TM1637_READ_DIO PORTC_IN(6) //IO方向
#define TM1637_DIO_IN() {GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=8<<12;}
#define TM1637_DIO_OUT() {GPIOC->CRL&=0XFFFF0FFF;GPIOC->CRL|=3<<12;}
void TM1637_Start(void)
{
TM1637_DIO_OUT();
TM1637_CLK = 1;
TM1637_DIO = 1;
delay_us(2);
TM1637_DIO = 0;
} void TM1637_Ack(void)
{
TM1637_DIO_IN();
TM1637_CLK = 0;
delay_us(5);
while(TM1637_READ_DIO);
TM1637_CLK = 1;
delay_us(2);
TM1637_CLK = 0;
}

  

  

stm32定义GPIO口方向和操作的代码的更多相关文章

  1. STM32的GPIO口的输出开漏输出和推挽输出

    本文来自cairang45的博客,讲述了STM32的GPIO口的输出开漏输出和推挽输出, 作者博客:http://blog.ednchina.com/cairang45 本文来自: 高校自动化网(Ww ...

  2. STM32之GPIO端口位带操作

    #ifndef __SYS_H #define __SYS_H #include "stm32f10x.h" //位带操作 //把“位带地址+位序号”转换别名地址宏 #define ...

  3. 嵌入式STM32的GPIO口工作模式的介绍

    一.输入模式 1. 浮空输入 浮空输入模式下,上拉和下拉两个开关断开,高或低电平通过施密特触发器到达输入数据寄存器,CPU可以通过读取输入数据寄存器从而读取到外部输入的高低电平值. 2. 输入上拉模式 ...

  4. ARM Cortex M3系列GPIO口介绍(工作方式探讨)

    一.Cortex M3的GPIO口特性    在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图     从图中可以看出 ...

  5. STM32学习笔记(二):GPIO口工作原理

    STM32每个IO口具有7个寄存器来控制,每个IO口都可以自由进行编程控制,我们编程实际上控制的是通过控制那7个寄存器来控制我们的IO口,我们可以通过编程控制IO口,把IO口配置成如下八种模式: 1. ...

  6. stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)

    STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CR ...

  7. STM32基本GPIO操作:按键输入(扫描+外部中断)

    (涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注 ...

  8. STM32之GPIO操作

    啊哈.没办法.外国人的芯片就喜欢用英文来命名,所以中文的:通用输入/输出  就用GPIO来代替..谁叫哥们都不是外国人呢.好啦.胡扯了一下,借用唐伯虎点秋香的话:小小书童,可笑可笑... 知道了GPI ...

  9. STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用

    STM32单片机在Keil5下仿真的问题解决及GPIO口初始化.使用 最近看了视频,里面有仿真,可以清楚看到GPIO口的数据变化,也想尝试下,DUG时却出现*** error 65: access v ...

随机推荐

  1. mysql 批处理文件--- 创建 用户 以及 导入数据

    在window下,通过批处理文件(.bat),进行开启MYSQL服务,导入数据文件(.sql) 1)新建一个txt文件,写入以下内容 rem 启动mysql56服务  mysql56是我的mysql服 ...

  2. 基因组 de novo 组装原理

    Falcon软件的组装流程 为了错误校正,将原始子reads进行overlap 预组装和错误校正 错误校正后reads的overlap检测 overlap的过滤 从overlap构建图 从图构建con ...

  3. 联想VIBE UI 固件ROM刷机包集合

    固件下载_联想乐问吧http://ask.lenovomobile.com/?c-157.html 联想VIBE UI 固件ROM刷机包集合 悬赏分:0     解决时间:2014/09/12 15: ...

  4. 如何设计一个RPC系统

    版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/162 来源:腾云阁 https://www.qclou ...

  5. [saiku] 连接 mondrain 数据源出错-空指针错误

    我的个亲娘,这个问题查半天终于查出来了. 一开始以为是配置的mysql的location连接有问题,各种修改啊各种尝试,还是不行. 好死不死报了空指针错误,让人无法下手. 后来发现是这样子的: 生成s ...

  6. C#压缩加密和vb压缩加密

    string[] FileProperties = new string[2]; FileProperties[0] = "C:\\a\\";//待压缩文件目录 FilePrope ...

  7. C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)

    要实现下面程序,首先我们需要三个文件 detours.h ,detours.lib ,detver.h(可以去网上下载) 1. 首先让我们看看,一个最简单的C程序,如何劫持system函数. #inc ...

  8. C++格式化输入输出

    要实现格式化输入输出,程序需要包含 iostreams 标准标头 <iomanip> 以定义几个各自采用单个参数的操控器. 备注: 其中每个操控器都返回重载 basic_istream&l ...

  9. 课堂练习&课下作业

    设计思路: 列举出买十本的所有情况:1.一本的时候不打折扣 2.两本的时候买两本价最低 3.三本的时候买三本价最低 4.四本的时候买四本价最低 5.五本的时候买五本价最低 6.六本的时候分一本和五本价 ...

  10. .Net程序员玩转Android系列之三~快速上手(转)

    转自http://www.cnblogs.com/HouZhiHouJueBlogs/p/3962122.html 快速环境搭建和Hello World 第一步:JAVA SDK(JDK)的安装: 官 ...