2016-02-20 4 views
-1

Я начинаю использовать панель обнаружения STM32F4 для проекта, и мне интересно, правильно ли я подошел к проблеме. wonna проверить свою функцию задержки мс, но не зря ..STM32F4 .. Функция задержки тестирования

#include "stm32f4x.h" 
#define LED_BLUE_GPIO GPIOC 
#define LED_BLUE_PIN  8 

void Delay_ms(uint16_t ms){ 

TIM3->ARR = ms;   //timer 3 
TIM3->CNT = 0; 
while((TIM3->SR & TIM_SR_UIF)==0){} 
TIM3->SR &= ~TIM_SR_UIF; 
} 


int main(void) 
{ 
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN; 
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; 

//initialization 

TIM3->PSC = 23999;  // f timer = fclk/24000 => 1kHz 
TIM3->ARR = 0xFFFF; 
TIM3->CR1 = TIM_CR1_CEN;  
DBGMCU->CR = DBGMCU_CR_DBG_TIM3_STOP; 

while(1){ 
GPIOC->ODR = GPIO_ODR_ODR8; 
Delay_ms(1000);  //delay 1 sec 
GPIOC->ODR = GPIO_ODR_ODR8; 
Delay_ms(1000);  //delay 1 sec 
} 

} 

ответ

1

я использую что-то вроде этого

void delay_ms(int ms) 
    { 
     int c = 0; 

     //set prescaler 
     TIM7 -> PSC = 1000; 

     //value autoreload 
     TIM7 -> ARR = tim_clk - 1 ; 

     //counter enable 
     TIM7 ->CR1 |= TIM_CR1_CEN; 

     while(c < ms) 
     { 
      while(!(TIM7->SR & TIM_SR_UIF)); 
      c++; 
     } 

     //counter disable 
     TIM7 ->CR1 &= ~TIM_CR1_CEN; 
    } 

и я рекомендую использовать HAL драйвер от ST, потому что для каждого из ST микроконтроллер кода будет то же самое, и вы сохраняете свое время.

Смежные вопросы