[分享] 笑点,STM32的设置

long521   2019-3-23 15:49 楼主
今天搞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,转到这个平台,一下子不适应,浑身难受,不过,看代码的过程也是一种乐趣,感谢各位群友的指导.

我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       

回复评论 (1)

程序员细心可以避免很多不必要的麻烦
专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
点赞  2019-3-25 08:33
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复