stm32-7SysTicks
                                            
 8349 단어  stm32
                    
stm32-7SysTicks
1. 시스템 타이머 관련 구성
우선 일부 코드를 추적하고, 다음은 타이머를 초기화하는 함수
    /*   SysTick 10ms    */
    SysTick_Init();  bsp 로 추적SysTicks.c 파일에서 그에 대한 정의
/**
  * @brief         
  * @param  
  * @retval 
  * @attention:         ,          
  */
void SysTick_Init(void)
{
    /*         
     * SystemFrequency / 1000    1ms    
     * SystemFrequency / 100000  10us    
     * SystemFrequency / 1000000 1us    
     */
//  if (SysTick_Config(SystemFrequency / 100000))   // ST3.0.0   
    if (SysTick_Config(SystemCoreClock / 100000))   // ST3.5.0   
    { 
        /* Capture error */ 
        while (1);
    }
        //          
    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}  여기서 함수 SysTickConfig(SystemCoreClock/100000) 구성 중단 간격, 구성 실패 반환 1, corecm3.h중:
/* #####################    SysTick function  ######################## */
#if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0)
/**
 * @brief  Initialize and start the SysTick counter and its interrupt.
 *
 * @param   ticks   number of ticks between two interrupts
 * @return  1 = failed, 0 = successful
 *
 * Initialise the system tick timer and its interrupt and start the
 * system tick timer / counter in free running mode to generate 
 * periodical interrupts.
 * ticks         ,    =ticks*    
 */
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{   //           ,ticks  <=fffffff
    if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
    // ticks-1    RELOAD, ticks-1  0 ticks
    SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
    //           SysTick      
    NVIC_SetPriority (SysTick_IRQn, (1<<__nvic_prio_bits class="hljs-number">1);  /* set Priority for Cortex-M0 System Interrupts */
    //       STK_CTRL:   、    、  
    SysTick->VAL   = 0;                                   /* Load the SysTick Counter Value */ 
    SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;               
    /* Enable SysTick IRQ and SysTick Timer */
    return (0);                                             /* Function successful */
}
#endif
/* ###################    Reset function  ############################# */  이 커널의 함수에서 비트 지시 매크로와 비트 차단 매크로를 사용했습니다. 먼저 코드를 올리십시오. 이것은corecm3.h에서 SysTick 레지스터에 대한 정의
/* SysTick Control / Status Register Definitions */
#define SysTick_CTRL_COUNTFLAG_Pos         16                                             /*!< SysTick CTRL: COUNTFLAG Position */
#define SysTick_CTRL_COUNTFLAG_Msk         (1ul << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
#define SysTick_CTRL_CLKSOURCE_Pos          2                                             /*!< SysTick CTRL: CLKSOURCE Position */
#define SysTick_CTRL_CLKSOURCE_Msk         (1ul << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
#define SysTick_CTRL_TICKINT_Pos            1                                             /*!< SysTick CTRL: TICKINT Position */
#define SysTick_CTRL_TICKINT_Msk           (1ul << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
#define SysTick_CTRL_ENABLE_Pos             0                                             /*!< SysTick CTRL: ENABLE Position */
#define SysTick_CTRL_ENABLE_Msk            (1ul << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask */
/* SysTick Reload Register Definitions */
#define SysTick_LOAD_RELOAD_Pos             0                                             /*!< SysTick LOAD: RELOAD Position */
#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)        /*!< SysTick LOAD: RELOAD Mask */
/* SysTick Current Register Definitions */
#define SysTick_VAL_CURRENT_Pos             0                                             /*!< SysTick VAL: CURRENT Position */
#define SysTick_VAL_CURRENT_Msk            (0xFFFFFFul << SysTick_VAL_CURRENT_Pos)        /*!< SysTick VAL: CURRENT Mask */  레지스터 비트 표시 매크로: SysTickxxx_Pos, 매크로가 확장되면 xxx가 해당 레지스터에 있는 위치입니다(예: SysTick 클록 소스를 제어하는 SysTick).CTRL_CLKSOURCE_Pos, 매크로 전개는 2입니다. 이 레지스터 위치는 바로 레지스터 STKCtrl의 Bit2
레지스터 비트 차단 매크로: SysTickxxx_Msk, 매크로 확장은 xxx의 비트를 모두 1로 설정한 후 SysTickxxx_Pos 비트SysTick 클록 소스를 제어하는 SysTickCTRL_CLKSOURCE_sk, 宏展 (1ul << SysTick Ctrl CLKSOURCE Pos) 로, 무기호 장정형 수치 (ul) 1을 왼쪽으로 두 자리 옮기면 Bit2: CLKSOURCE 비트만 1, 다른 비트는 0 의 수치를 얻을 수 있습니다. 이런 수치는 비트 조작과 맞물려 (비트와), | (비트와 맞물려) 레지스터의 일부 위치를 쉽게 수정할 수 있습니다.만약 CLKSOURCE를 제어하는 데 네 개의 레지스터 위치가 필요하다면, 이 매크로는 (0xf ul < SysTick CTRL CLKSOURCE Pos) 로 바뀌어야 한다. 그러면 CLKSOURCE의 네 자리가 1로 설정된 값을 얻을 수 있고, 이 매크로의 매개 변수는 이렇게 확정된다.
2. 똑딱이 타이머를 이용하여 정확한 시간 지연 실현
드롭 타이머 시간 정밀 지연 함수 사용 정보:
/**
  * @brief      us    ,10us     »
  * @param  
  * @arg nTime: Delay_us( counts )     counts * 10us
  * @retval     TimingDelay     
  */
void Delay_us(__IO u32 nTime)
{ 
    TimingDelay = nTime;    
    //       
    SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;
    //  TimingDelay  0,    
    while(TimingDelay != 0);
}  호출이 필요한 TimingDelay 자감 함수 끊기
/**
  * @brief         
  * @param  
  * @retval 
  * @attention    SysTick      SysTick_Handler()  
  */
void TimingDelay_Decrement(void)
{
    if (TimingDelay != 0x00)
    { 
        TimingDelay--;
    }
}  브레이크 함수 SysTickHandler(), stm32f10xit.h에서 사용자가 작성하고 끊길 때마다 TimingDelayDecrement();TimingDelay=0
/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
    TimingDelay_Decrement();    
}  주의
한 파일에서 다른 파일의 함수를 호출하려면 이 파일에서 extern으로 설명해야 합니다. 그렇지 않으면 오류가 발생합니다.
End
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
error: #136: struct ""has no field "AHBSTR"RL-TCPNet을 이식할 때 공식 이더넷 DP83848칩의 구동을 추가하여 컴파일할 때 계속 오류를 보고하였다 error: #136: struct ""has no field "AHBSTR" 사용한 것은 처음에 #...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.