OpenEdv-开源电子网

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

stm32f103新手求助 问题也不知道怎么写,大家进来看一下把

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-4-1
在线时间
5 小时
发表于 2017-7-12 10:59:58 | 显示全部楼层 |阅读模式
1金钱
#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002)大家帮忙看一下 这个是什么意思  谢谢

最佳答案

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

#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00)) 这个语句是宏定义的一种,也就是6楼说的带参数的宏定义,意思很简单,普通的宏定义是#define TURE 1,上面的语句其实跟这句意思一样就是用TURE表示1,那么上面的语句的意思就是用IS_RCC_APB2_PERIPH(PERIPH) 代表 ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00)),两者的不同在于后者带了参数,后者也是一个带参数的 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2017-7-12 10:59:59 | 显示全部楼层
#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))
这个语句是宏定义的一种,也就是6楼说的带参数的宏定义,意思很简单,普通的宏定义是#define TURE 1,上面的语句其实跟这句意思一样就是用TURE表示1,那么上面的语句的意思就是用IS_RCC_APB2_PERIPH(PERIPH) 代表
((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00)),两者的不同在于后者带了参数,后者也是一个带参数的函数,不难发现((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))这个是一个计算的公式一样的存在,值取决于参数的值。
回复

使用道具 举报

0

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1216
金钱
1216
注册时间
2016-7-17
在线时间
143 小时
发表于 2017-7-12 12:02:51 | 显示全部楼层
在 assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph))语句中可以查到这个函数,assert_param的作用就是用来判断传递给函数的参数是否是有效值,而RCC_APB2Periph的定义如下:
#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)


#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-4-1
在线时间
5 小时
 楼主| 发表于 2017-7-12 16:39:29 | 显示全部楼层
虾兵蟹将 发表于 2017-7-12 12:02
在 assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph))语句中可以查到这个函数,assert_param的作用就是用 ...

那最后一行这个定义什么意思  能翻译一下吗  谢谢
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-4-1
在线时间
5 小时
 楼主| 发表于 2017-7-12 18:19:34 | 显示全部楼层
yklstudent 发表于 2017-7-12 17:56
楼主先把C语言玩熟玩透了

C语言确实不行  现在只能用一点学一点    要是懂的话  给指点一下可以吗?
回复

使用道具 举报

14

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2311
金钱
2311
注册时间
2017-2-20
在线时间
229 小时
发表于 2017-7-12 18:28:34 | 显示全部楼层
星光闪闪亮 发表于 2017-7-12 16:39
那最后一行这个定义什么意思  能翻译一下吗  谢谢

带参数的宏定义,
电子之路漫漫兮,吾将任总而道远。http://www.openedv.com/static/image/smiley/default/lol.gif
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-4-1
在线时间
5 小时
 楼主| 发表于 2017-7-13 22:34:05 | 显示全部楼层
MrXiong 发表于 2017-7-12 10:59
#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))
这个语 ...

恩恩 大概意思我懂了  谢谢   那再麻烦你一下,((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))这个类似公式的东西是想表达什么呢?
回复

使用道具 举报

6

主题

146

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1254
金钱
1254
注册时间
2016-11-30
在线时间
211 小时
发表于 2017-7-15 23:09:08 | 显示全部楼层
星光闪闪亮 发表于 2017-7-13 22:34
恩恩 大概意思我懂了  谢谢   那再麻烦你一下,((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x0 ...

应该是寄存器的设置,具体的要查手册才知道!其实这个你不用管很多的,大体了解一下就行了,因为,后面你开发的时候,不会特意的写底层的东西。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 21:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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