您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制STM32单片机基础学习:从勉强看懂一行程序到IO口研究 正文
STM32单片机基础学习:从勉强看懂一行程序到IO口研究

STM32单片机基础学习:从勉强看懂一行程序到IO口研究

点击数:7210 次   录入时间:03-04 11:37:43   整理:http://www.55dianzi.com   电脑-单片机-自动控制
  */
  /* Output Compare Timing Mode configuration: Channel1 *///输出比较模式
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //预置值
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //对CCER中CCxP的操作
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
  /*对捕获/比较使能寄存器(TIMx_CCER)进行操作,置CC1E为1 */
  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_DISAble);
  /* Output Compare Timing Mode configuration: Channel2 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
  //这个是将CCR2_Val的值送到TMI2_CCR2中
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Disable);
  /* Output Compare Timing Mode configuration: Channel3 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
  TIM_OC3Init(TIM2, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Disable);
  /*
  */
  /* Output Compare Timing Mode configuration: Channel4 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
  TIM_OC4Init(TIM2, &TIM_OCInitStructure);
  TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Disable);
  /* TIM IT enable */
  TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);
  对DIER寄存器操作,中断允许配置,相关代码如下:
  
  而DIER寄存器如下:
  
  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);
  //开启定时器的运行
  while (1);
  }

 解读:
  (1) 时钟来源 CK_INT,设置的方法是让TIMx_SMCR中的SMS[2:0]=000,最后通过TIM_Cmd(TIM2, ENABLE);函数将TIMx_CR1中的CEN置1,开启定时器的运行;
  (2) 接下来设置定时器的基本参数
  (3) 然后是设置定时器的各个通道
  (4) 最后开启定时器运行
  最后,将这个例子稍加修改,令其运行在我的实验板上。
  需要修改的仅是将其原来的输出从GPIOC的第6~第9脚变为GPIOD的第8~第11脚。为此,需要改的地方有:
  
  将蓝色框内的GPIOC改为GPIOD。这个是最先写的,但实际上一开始根本没注意到这个地方,没有改成GPIOD,结果一仿真,不正确,再一细查,原来端口还要配置时钟,改过来就对了。瞧,这不验证了上面的说法“认识事物是螺旋式上升的”学了定时器,对于I/O口和时钟又有了更进一步的理解了。
  
  将红色框内的GPIO分别改成8,9,10,11,将蓝色框内的GPIOC改为GPIOD。
  最后,到stm32f10x_it.c中,修改相应的输出
  
  参考上图红色框内,将GPIOC改为GPIOD,将6脚改为8脚,其他部分类推。
  修改好后运行,所有灯亮了,看不出效果,于是又将预分频系数由4改为64,这样一来,LED开始闪烁了。



上一页  [1] [2] [3] [4] 


本文关键字:单片机  程序  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制