OpenEdv-开源电子网

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

问下原子哥关于m4位带的问题

[复制链接]

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2013-4-9
在线时间
25 小时
发表于 2014-1-16 23:52:15 | 显示全部楼层 |阅读模式
#define GPIOA_ODR_Addr    (GPIOA_BASE+12)
#define GPIOA_IDR_Addr    (GPIOA_BASE+8) 这是m3的两个寄存器的地址 在datesheet里面偏移量就是12和8

可是我在用f407的时候 文档里的这两个寄存器偏移量是10和14,如果按照文档里面的话就是io口的基址加上10和14,可是错了
但是加了20 和16 就可以了,难道是文档有问题么?还是我忽略了其他问题
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) 
#define GPIOA_IDR_Addr    (GPIOA_BASE+16)

还有一个问题是 我定义#define led0 paout(10)就会出现错误:expected an expression 是什么原因啊??
然后直接paout()=1就可以。。谢谢。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-1-17 00:37:22 | 显示全部楼层
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-1-17 11:08:49 | 显示全部楼层
原子哥洞房结束后会回复您的。呵呵
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2013-4-9
在线时间
25 小时
 楼主| 发表于 2014-1-17 11:44:26 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
23333  信息量好多啊
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-1-17 12:59:46 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
洞房几个晚上了吗。。身体要紧,坛里还有好多人等待原子哥回答问题呢。哈哈
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-1-18 16:53:17 | 显示全部楼层
回复【5楼】hechao3225:
---------------------------------
洞房还要几天,现在还在准备。。。。
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-1-18 18:28:17 | 显示全部楼层
回复【6楼】Admin:
---------------------------------
。。不是已经洞房了么,消息不看可靠啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-18 18:45:19 | 显示全部楼层
#ifndef __SYS_H
#define __SYS_H  
#include "stm32f4xx.h" 
//0,不支持ucos
//1,支持ucos
#define SYSTEM_SUPPORT_UCOS 0 //定义系统文件夹是否支持UCOS
    
 
//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).M4同M3类似,只是寄存器地址变了.
//IO口操作宏定义
#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)) 
//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) //0x40020014
#define GPIOB_ODR_Addr    (GPIOB_BASE+20) //0x40020414 
#define GPIOC_ODR_Addr    (GPIOC_BASE+20) //0x40020814 
#define GPIOD_ODR_Addr    (GPIOD_BASE+20) //0x40020C14 
#define GPIOE_ODR_Addr    (GPIOE_BASE+20) //0x40021014 
#define GPIOF_ODR_Addr    (GPIOF_BASE+20) //0x40021414    
#define GPIOG_ODR_Addr    (GPIOG_BASE+20) //0x40021814   
#define GPIOH_ODR_Addr    (GPIOH_BASE+20) //0x40021C14    
#define GPIOI_ODR_Addr    (GPIOI_BASE+20) //0x40022014     

#define GPIOA_IDR_Addr    (GPIOA_BASE+16) //0x40020010 
#define GPIOB_IDR_Addr    (GPIOB_BASE+16) //0x40020410 
#define GPIOC_IDR_Addr    (GPIOC_BASE+16) //0x40020810 
#define GPIOD_IDR_Addr    (GPIOD_BASE+16) //0x40020C10 
#define GPIOE_IDR_Addr    (GPIOE_BASE+16) //0x40021010 
#define GPIOF_IDR_Addr    (GPIOF_BASE+16) //0x40021410 
#define GPIOG_IDR_Addr    (GPIOG_BASE+16) //0x40021810 
#define GPIOH_IDR_Addr    (GPIOH_BASE+16) //0x40021C10 
#define GPIOI_IDR_Addr    (GPIOI_BASE+16) //0x40022010 
 
//IO口操作,只对单一的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)  //输入

#define PHout(n)   BIT_ADDR(GPIOH_ODR_Addr,n)  //输出 
#define PHin(n)    BIT_ADDR(GPIOH_IDR_Addr,n)  //输入

#define PIout(n)   BIT_ADDR(GPIOI_ODR_Addr,n)  //输出 
#define PIin(n)    BIT_ADDR(GPIOI_IDR_Addr,n)  //输入
/////////////////////////////////////////////////////////////////
//Ex_NVIC_Config专用定义
#define GPIO_A  0
#define GPIO_B  1
#define GPIO_C 2
#define GPIO_D  3
#define GPIO_E  4
#define GPIO_F  5
#define GPIO_G  6 
#define GPIO_H  7 
#define GPIO_I  8 
#define FTIR    1   //下降沿触发
#define RTIR    2   //上升沿触发

//GPIO设置专用宏定义
#define GPIO_MODE_IN     0 //普通输入模式
#define GPIO_MODE_OUT 1 //普通输出模式
#define GPIO_MODE_AF 2 //AF功能模式
#define GPIO_MODE_AIN 3 //模拟输入模式

#define GPIO_SPEED_2M 0 //GPIO速度2Mhz
#define GPIO_SPEED_25M 1 //GPIO速度25Mhz
#define GPIO_SPEED_50M 2 //GPIO速度50Mhz
#define GPIO_SPEED_100M 3 //GPIO速度100Mhz

#define GPIO_PUPD_NONE 0 //不带上下拉
#define GPIO_PUPD_PU 1 //上拉
#define GPIO_PUPD_PD 2 //下拉
#define GPIO_PUPD_RES 3 //保留 

#define GPIO_OTYPE_PP 0 //推挽输出
#define GPIO_OTYPE_OD 1 //开漏输出 

//JTAG模式设置定义
#define JTAG_SWD_DISABLE   0X02
#define SWD_ENABLE         0X01
#define JTAG_SWD_ENABLE    0X00

/////////////////////////////////////////////////////////////////  
u8 Sys_Clock_Set(u32 plln,u32 pllm,u32 pllp,u32 pllq); //系统时钟设置
void Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq); //时钟初始化  
void Sys_Soft_Reset(void);      //系统软复位
void Sys_Standby(void);         //待机模式 
void MY_NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset); //设置偏移地址
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group); //设置NVIC分组
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,u8 NVIC_Group);//设置中断
void Ex_NVIC_Config(u8 GPIOx,u8 BITx,u8 TRIM); //外部中断配置函数(只对GPIOA~I)
void GPIO_AF_Set(GPIO_TypeDef* GPIOx,u8 BITx,u8 AFx); //GPIO复用功能设置
void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD);//GPIO设置函数
void JTAG_Set(u8 mode);
//////////////////////////////////////////////////////////////////////////////
//以下为汇编函数
void WFI_SET(void); //执行WFI指令
void INTX_DISABLE(void);//关闭所有中断
void INTX_ENABLE(void); //开启所有中断
void MSR_MSP(u32 addr); //设置堆栈地址



#endif
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2013-4-9
在线时间
25 小时
 楼主| 发表于 2014-1-18 20:28:13 | 显示全部楼层
额。。。m4的sys.h啊啊啊!!能不能发个sys.c的呀?

还有那个expected an expression的错误是为什么 main里面不能直接用LED0  只能直接写PAout(n),是不是mdk的设置问题

到网上查了说在option中c/c++一栏中misc_control加入--c99,但是我还是有问题??谢谢原子哥解答。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-18 22:40:53 | 显示全部楼层
干脆给你个工程吧

跑马灯.rar

74.88 KB, 下载次数: 163

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2013-4-9
在线时间
25 小时
 楼主| 发表于 2014-1-19 11:16:22 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
谢谢原子哥~
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-2-22
在线时间
0 小时
发表于 2014-2-22 21:21:42 | 显示全部楼层
回复【楼主位】tangqilin:
定义#define led0 paout(10)就会出现错误:expected an expression 是什么原因啊??
然后直接paout()=1
......
---------------------------------
可能是#define led0 paout(10)后面多了一个;
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-2-22
在线时间
0 小时
发表于 2014-2-22 21:22:21 | 显示全部楼层
为什么偏移地址和资料上的不同?
回复 支持 反对

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1814
金钱
1814
注册时间
2011-10-9
在线时间
230 小时
发表于 2014-2-22 22:03:19 | 显示全部楼层
直接用库里面的位操作不好么
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2013-4-9
在线时间
25 小时
 楼主| 发表于 2014-2-24 11:08:20 | 显示全部楼层
回复【12楼】lixiangru11:

回复【楼主位】tangqilin:
定义#define led0 paout(10)就会出现错误:expected an expression 是什么原因啊??
然后直接paout()=1
......
---------------------------------
可能是#define led0 paout(10)后面多了一个;

---------------------------------
果然是这样的
谢谢啦
回复 支持 反对

使用道具 举报

7

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
204
金钱
204
注册时间
2013-4-9
在线时间
25 小时
 楼主| 发表于 2014-2-24 11:08:40 | 显示全部楼层
回复【13楼】lixiangru11:

为什么偏移地址和资料上的不同?

---------------------------------
这个不太清楚。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 05:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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