这就是正确程序,定时是2US,由于没有用中断,延时有伤停补时,最后是350正好是1秒,亲测!!!
- void TIM_Config(void)
- {
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- /* TIM3 clock enable */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
- /* Compute the prescaler value */
- PrescalerValue = (uint16_t) (SystemCoreClock / 1000000) - 1;
- /* Time base configuration */
- TIM_TimeBaseStructure.TIM_Period = 1; //2 u second
- TIM_TimeBaseStructure.TIM_Prescaler = 23;//PrescalerValue;
- TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
- TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;
- TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
- TIM_Cmd(TIM3, DISABLE);
- }
- void TimeDelay2us(uint16_t Times)
- {
- TIM3->CR1 |= TIM_CR1_CEN; //启动定时器
- while(Times--)
- {
- while((TIM3->SR & TIM_FLAG_Update) == RESET);
- TIM3->SR &= ~TIM_FLAG_Update;
- }
- TIM3->CR1 &= ~TIM_CR1_CEN; //关闭定时器
- }
- void Delay(uint16_t Times1)
- {
- uint16_t dd,count;
- for(count=0;count<Times1;count++)
- {
- for(dd=0;dd<350;dd++) //必须延这么多才到1秒
- TimeDelay2us(1);
- }
-
- }
- void delay_us(uint16_t Times2) //2倍
- {
- uint16_t count;
- for(count=0;count<Times2;count++)
- {
- TimeDelay2us(1);
- }
- }
- void delay_ms(uint16_t Times3)
- {
- uint16_t count;
- for(count=0;count<Times3;count++)
- Delay(1);
- }
|