stm32定义GPIO口方向和操作的代码
#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口方向和操作的代码的更多相关文章
- STM32的GPIO口的输出开漏输出和推挽输出
本文来自cairang45的博客,讲述了STM32的GPIO口的输出开漏输出和推挽输出, 作者博客:http://blog.ednchina.com/cairang45 本文来自: 高校自动化网(Ww ...
- STM32之GPIO端口位带操作
#ifndef __SYS_H #define __SYS_H #include "stm32f10x.h" //位带操作 //把“位带地址+位序号”转换别名地址宏 #define ...
- 嵌入式STM32的GPIO口工作模式的介绍
一.输入模式 1. 浮空输入 浮空输入模式下,上拉和下拉两个开关断开,高或低电平通过施密特触发器到达输入数据寄存器,CPU可以通过读取输入数据寄存器从而读取到外部输入的高低电平值. 2. 输入上拉模式 ...
- ARM Cortex M3系列GPIO口介绍(工作方式探讨)
一.Cortex M3的GPIO口特性 在介绍GPIO口功能前,有必要先说明一下M3的结构框图,这样能够更好理解总线结构和GPIO所处的位置. Cortex M3结构框图 从图中可以看出 ...
- STM32学习笔记(二):GPIO口工作原理
STM32每个IO口具有7个寄存器来控制,每个IO口都可以自由进行编程控制,我们编程实际上控制的是通过控制那7个寄存器来控制我们的IO口,我们可以通过编程控制IO口,把IO口配置成如下八种模式: 1. ...
- stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)
STM32的I/O口可以由软件配置成如下8种模式:输入浮空.输入上拉.输入下拉.模拟输入.开漏输出.推挽输出.推挽式复用功能及开漏复用功能.每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CR ...
- STM32基本GPIO操作:按键输入(扫描+外部中断)
(涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注 ...
- STM32之GPIO操作
啊哈.没办法.外国人的芯片就喜欢用英文来命名,所以中文的:通用输入/输出 就用GPIO来代替..谁叫哥们都不是外国人呢.好啦.胡扯了一下,借用唐伯虎点秋香的话:小小书童,可笑可笑... 知道了GPI ...
- STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用
STM32单片机在Keil5下仿真的问题解决及GPIO口初始化.使用 最近看了视频,里面有仿真,可以清楚看到GPIO口的数据变化,也想尝试下,DUG时却出现*** error 65: access v ...
随机推荐
- 关于e820cycles参数
关于e820cycles参数http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=327458&pid= ...
- 使用node js 操作 Mysql 数据库
使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...
- Unity5.3官方VR教程重磅登场-系列2
作者:王寒链接:https://zhuanlan.zhihu.com/p/20485529来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 欢迎继续我们的学习. 北京时间 ...
- android内存耗用:VSS/RSS/PSS/USS
VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) 不是真实当前应用进程所占用的内存. 内存分配的原理 从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完 ...
- bzoj题解汇总(1017-1020)
bzoj1017: 树形dp. 设\(f[i][j][k]\)表示当前在点\(i\),有\(j\)个用于上层合成,花费金币为\(k\)的最大攻击力. bzoj1018: 一题多解. http://ww ...
- laravel实现第三方登录
https://github.com/laravel/socialite 这是官方的第三方登录包,支持很多国外的第三方登录 https://github.com/overtrue/socialite ...
- js打印图形
1. js绘画金字塔 思想:先画n-i个空格,再画2*i-1个*号,再画n-i个空格(此处可以省略),一行画完之后换行:循环下一行(先判断每行的空格数和*号与行数间的关系) var n=window ...
- DataTable常用操作
添加列和行的三种方法(转载) 原文地址:http://www.cnblogs.com/jRoger/articles/1887581.html DataTable tblDatas =new Data ...
- java 多线程——quartz 定时调度的例子
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- 用js实现返回上一页
<a href="javascript :;" onClick="javascript :history.back(-1);">返回上一页</ ...