OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4370|回复: 4

求原子哥的关于STM32F10系列的位带操作的源程序

[复制链接]

35

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2014-7-30
在线时间
49 小时
发表于 2015-4-28 09:16:44 | 显示全部楼层 |阅读模式
5金钱
                                           如题

最佳答案

查看完整内容[请看2#楼]

参考一下 ARM Cortex权威指南 这本书,还有STM32中文参考手册,里面讲的很详细
我就是我,是颜色不一样的烟火。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-1-5
在线时间
2 小时
发表于 2015-4-28 09:16:45 | 显示全部楼层
参考一下 ARM Cortex权威指南 这本书,还有STM32中文参考手册,里面讲的很详细
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-1-5
在线时间
2 小时
发表于 2015-4-28 10:40:43 | 显示全部楼层
#ifndef _SBITDEF_H_
#define _SBITDEF_H_

#include "stm32f10x.h"

//把"位带地址+位序号"转换成别名地址的宏
#define BITBAND(addr,bitnum) ((addr & 0xF0000000) + 0x2000000 + ((addr & 0xFFFFF)<<5) + (bitnum<<2))
//把该地址转换成一个指针
#define MEM_ADDR(addr) ( *((volatile unsigned long *)(addr)) )
//bit地址映射
#define BIT_ADDR(addr,bitnum) ( MEM_ADDR(BITBAND(addr,bitnum)) )

//IO口地址映射
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //GPIO端口输出数据寄存器GPIOx_IDR地址偏移0x0C,即12
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //GPIO端口输入数据寄存器GPIOx_IDR地址偏移0x08,即8
#define GPIOB_ODR_Addr (GPIOB_BASE+12)
#define GPIOB_IDR_Addr (GPIOB_BASE+8)
#define GPIOC_ODR_Addr (GPIOC_BASE+12)
#define GPIOC_IDR_Addr (GPIOC_BASE+8)
#define GPIOD_ODR_Addr (GPIOD_BASE+12)
#define GPIOD_IDR_Addr (GPIOD_BASE+8)
#define GPIOE_ODR_Addr (GPIOE_BASE+12)
#define GPIOE_IDR_Addr (GPIOE_BASE+8)
#define GPIOF_ODR_Addr (GPIOF_BASE+12)
#define GPIOF_IDR_Addr (GPIOF_BASE+8)
#define GPIOG_ODR_Addr (GPIOG_BASE+12)
#define GPIOG_IDR_Addr (GPIOG_BASE+8)

//对单一的IO口操作,确保n<16
#define Aout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //输出
#define Ain(n)  BIT_ADDR(GPIOA_IDR_Addr,n) //输入
#define Bout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出
#define Bin(n)  BIT_ADDR(GPIOB_IDR_Addr,n) //输入
#define Cout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出
#define Cin(n)  BIT_ADDR(GPIOC_IDR_Addr,n) //输入
#define Dout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //输出
#define Din(n)  BIT_ADDR(GPIOD_IDR_Addr,n) //输入
#define Eout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出
#define Ein(n)  BIT_ADDR(GPIOE_IDR_Addr,n) //输入
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //输出
#define PFin(n)  BIT_ADDR(GPIOF_IDR_Addr,n) //输入
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //输出
#define PGin(n)  BIT_ADDR(GPIOG_IDR_Addr,n) //输入


#endif
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-4-28 19:23:01 | 显示全部楼层
看寄存器版本例程
回复

使用道具 举报

1

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2014-9-23
在线时间
0 小时
发表于 2015-4-28 22:33:52 | 显示全部楼层
sys.h里有相关定义,简化了位带使用
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 03:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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