前天刚刚学的单片机 我想用定时器写一个跑马灯的程序 用的是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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
先把两个分别掌握了再说吧
一周热门 更多>