求帮助新人 求好心人

2019-07-21 01:25发布

前天刚刚学的单片机 我想用定时器写一个跑马灯的程序 用的是STM32F103rc的板子  不知道怎么办了 求大神告知
#include "stm32f10x.h"
#include "led.h"  
 #include "stm32f10x_gpio.h"
#include "stm32f10x_tim.h"
 void RCC_Confifuration(void)
 {
 RCC_DeInit();
 RCC_HSEconfig(RCC_HSE_ON);
 while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET );
  RCC_HCLKConfig(RCC_SYSCLK_Div1);    //AHB使用系统时钟   //HCLK = SYSCLK
  RCC_PCLK2Config(RCC_HCLK_Div1);     //APB2为HCLK/1      //PCLK2 = HCLK/1
  RCC_PCLK1Config(RCC_HCLK_Div2) //APB1为HCLK/2      //PCLK1 = HCLK/2
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  //PLLCLK = 8MHz * 9 = 72MHz
   RCC_PLLCmd(ENABLE);  //启动PLL //Enable PLL
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL启动  /* Wait till PLL is ready */
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将PLL设置为系统时钟源  /* Select PLL as system clock source */
  while(RCC_GetSYSCLKSource() != 0x08) ;  
 }
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef  VECT_TAB_RAM 
  NVIC_SetVectorTable(NVIC_VectTab_RAM,0x00);
 #else
  NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x00);
 #endif
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
   NVIC_InitStructure.NVIC_IRQChannel =TM2_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
 NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
   NVIC_Init(&NVIC_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel =USART3_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
 NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
   NVIC_Init(&NVIC_InitStructure);

   }
void TIM_Configuration(void)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  NVIC_OCInitTypeDef TIM_OCInitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  TIM_DeInit(TIM2); 
  TIM_InternalClockConfig(TIM2);

   TIM_TimeBaseStructure.TIM_Period=20;
  TIM_TimeBaseStructure.TIM_Prescaler=35999;
  TIM_TimeBaseStructure.TIM_ClockDivison=0x0;  
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
   
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  TIM_OC1Init(TIM2,&TIM_OCInitStructure);

  TIM_Cmd(TIM2,ENABLE);
  TIM_PrescalerConfig(TIM2,35999,TIM_PSCReloadMODE_Immediate);

    TIM_ClearFlag(TIM2,TIM_FLAG_Update);
       TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

}
 void TIM2_IRQHandler(void)
 {
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
if(m_SysTimeClock>=200000000)
m_SysTimeClock =0;
 else
  m_SysTimeClock+=1;

 }

int main()
{
LED_Init();
while(1)
{
  LED1(1);
  LED2(1);
  LED3(1);
  LED4(1);
  LED5(1);
  LED6(1);
  LED7(1);
  LED8(1);
   
LED1(0);

LED2(0);
 
LED3(0);

LED4(0);
 
LED5(0);

LED6(0);
 
LED7(0);

LED8(0);
 

}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。