找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 785|回复: 0
收起左侧

STM32单片机嘀嗒定时器主程序

[复制链接]
ID:1061970 发表于 2023-2-10 22:02 | 显示全部楼层 |阅读模式
#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)        ;                                               //无限循环
   
        
}




/******************************************************************************
* 函数名  :MySystemInit
* 描述    :配置不同的系统时钟
* 输入    : 无
* 输出    : 无
* 返回    : 无
******************************************************************************/
void MySystemInit()        
{   
    RCC_DeInit();                                                                     //将RCC寄存器设为默认值
    RCC_HSEConfig(RCC_HSE_ON);                                                   //打开外部高速时钟
    HSEStartUpStatus = RCC_WaitForHSEStartUp();                          //等待外部高速时钟工作
    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);                                        //设置FLASH存储器延时时钟周期数
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);   //使能FLASH预取指缓存
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);                             //设置PLL作为系统时钟源
    while(RCC_GetSYSCLKSource() != 0x08)                                          //等待PLL成为系统时钟源有效
     {
     }
    }
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF|RCC_APB2Periph_AFIO, ENABLE); //使能PA,PB,PC,PF,AFIO时钟
                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;  // 关闭滴答定时器  
}
void Delay_ms(__IO u32 nTime)
{
        TimingDelay = nTime;        
        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;        // 使能滴答定时器  
        while(TimingDelay != 0);
        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;  // 关闭滴答定时器
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表