找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1022|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)嘀嗒定時(shí)器主程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1061970 發(fā)表于 2023-2-10 22:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#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í)器
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表