1832|1

613

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

笑点,STM32的设置 [复制链接]

今天搞STM32发晕了,在群里问了一下,最后发现原来自己没小心看代码.就是一个符号*,粗心是要不得的.然后指针的问题还是要注意的.
看下面的代码:
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_Init里面有&,另一个没有&.这个我平时没注意到,然后今天就蒙了.
  GPIO_InitStructure->GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure->GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure->GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOB, GPIO_InitStructure);

其实很简单,就是要小心,如果随便看看,很难发现.今天使劲的分析,终于发现,这个&是有不同的,定义的时候,是定义的*还是不*就在这里要体现出来了.
其实我最后发现这个问题,还不是这IO设置这里,是在TIME设置这里.
请看这个:
void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct)
{
  /* Check the parameters */
  assert_param(IS_TIM_123458_PERIPH(TIMx));
  assert_param(IS_TIM_COUNTER_MODE(TIM_TimeBaseInitStruct->TIM_CounterMode));
  assert_param(IS_TIM_CKD_DIV(TIM_TimeBaseInitStruct->TIM_ClockDivision));

  /* Select the Counter Mode and set the clock division */
  TIMx->CR1 &= CR1_CKD_Mask & CR1_CounterMode_Mask;
  TIMx->CR1 |= (u32)TIM_TimeBaseInitStruct->TIM_ClockDivision |
                TIM_TimeBaseInitStruct->TIM_CounterMode;
  /* Set the Autoreload value */
  TIMx->ARR = TIM_TimeBaseInitStruct->TIM_Period ;

  /* Set the Prescaler value */
  TIMx->PSC = TIM_TimeBaseInitStruct->TIM_Prescaler;

  /* Generate an update event to reload the Prescaler value immediatly */
  TIMx->EGR = TIM_PSCReloadMode_Immediate;

  if (((*(u32*)&TIMx) == TIM1_BASE) || ((*(u32*)&TIMx) == TIM8_BASE))  
  {
    /* Set the Repetition Counter value */
    TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
  }        
}

这里有一个判断
if (((*(u32*)&TIMx) == TIM1_BASE) || ((*(u32*)&TIMx) == TIM8_BASE))  
  {
    /* Set the Repetition Counter value */
    TIMx->RCR = TIM_TimeBaseInitStruct->TIM_RepetitionCounter;
  }   

这个判断(*(u32*)&TIMx) ,如果不仔看就很难理解了,但是看一下上面的就明白了.其实就像群友说的,就是一个地址和转换,指针的表达问题.STM32的C用得比较深了,我以前只玩汇编和简单的C,转到这个平台,一下子不适应,浑身难受,不过,看代码的过程也是一种乐趣,感谢各位群友的指导.

最新回复

程序员细心可以避免很多不必要的麻烦  详情 回复 发表于 2019-3-25 08:33
点赞 关注(1)
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 
 

回复
举报

1368

帖子

6

TA的资源

版主

沙发
 
程序员细心可以避免很多不必要的麻烦
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表