標(biāo)題: STM32單片機(jī)嘀嗒定時(shí)器主程序 [打印本頁(yè)]

作者: lmalma    時(shí)間: 2023-2-10 22:02
標(biāo)題: STM32單片機(jī)嘀嗒定時(shí)器主程序
#include "stm32f10x.h"
#include "led.h"
#include  "tim.h"

u32  TimingDelay;        
ErrorStatus   HSEStartUpStatus;                                  // 變量定義

void SysTick_Init(void);
void Delay_ms(__IO u32 nCount);        

int main(void)
{        
        GPIO_Configuration();         //配置GPIO
  SysTick_Init();
        EXTI_Configuration();                                //配置EXTI
  NVIC_Configuration();                                //配置NVIC
  TIM_Configuration();  
        while (1)        ;                                               //無(wú)限循環(huán)
   
        
}




/******************************************************************************
* 函數(shù)名  :MySystemInit
* 描述    :配置不同的系統(tǒng)時(shí)鐘
* 輸入    : 無(wú)
* 輸出    : 無(wú)
* 返回    : 無(wú)
******************************************************************************/
void MySystemInit()        
{   
    RCC_DeInit();                                                                     //將RCC寄存器設(shè)為默認(rèn)值
    RCC_HSEConfig(RCC_HSE_ON);                                                   //打開(kāi)外部高速時(shí)鐘
    HSEStartUpStatus = RCC_WaitForHSEStartUp();                          //等待外部高速時(shí)鐘工作
    if(HSEStartUpStatus == SUCCESS)
    {
       RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72 MHz                                                                                                         
       RCC_PLLCmd(ENABLE);                                                                    //使能PLL
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)      //等待PLL就緒
     {
     }
    RCC_HCLKConfig(RCC_SYSCLK_Div1);                                                   // HCLK = SYSCLK
    RCC_PCLK2Config(RCC_HCLK_Div1);                                               // PCLK2 = HCLK
    RCC_PCLK1Config(RCC_HCLK_Div2);                                                         // PCLK1 = HCLK/2
    FLASH_SetLatency(FLASH_Latency_2);                                        //設(shè)置FLASH存儲(chǔ)器延時(shí)時(shí)鐘周期數(shù)
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能FLASH預(yù)取指緩存
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                             //設(shè)置PLL作為系統(tǒng)時(shí)鐘源
    while(RCC_GetSYSCLKSource() != 0x08)                                          //等待PLL成為系統(tǒng)時(shí)鐘源有效
     {
     }
    }
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO, ENABLE); //使能PA,PB,PC,PF,AFIO時(shí)鐘
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        
}


void SysTick_Init(void)
{
        /* SystemCoreClock / 1000    1ms中斷一次
         * SystemCoreClock / 100000         10us中斷一次
         * SystemCoreClock / 1000000 1us中斷一次*/

        //if (SysTick_Config(72000)
        if (SysTick_Config(SystemCoreClock / 1000))         // 1ms中斷一次
        {         
                while (1);
        }
        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;  // 關(guān)閉滴答定時(shí)器  
}
void Delay_ms(__IO u32 nTime)
{
        TimingDelay = nTime;        
        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;        // 使能滴答定時(shí)器  
        while(TimingDelay != 0);
        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;  // 關(guān)閉滴答定時(shí)器
}




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1