sys tick定时器的1秒钟设计与实现

img

img

img

img

img

img

img

img

img


以上是我做的仿真和代码,想实现systick定时器的1秒延时设计,不知哪里出了问题,灯没亮。
要求四盏灯循环点亮。
求解答。

  • 你看下这篇博客吧, 应该有用👉 :Systick定时器使用以及一些问题记录
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    首先,根据参考资料中的段落2所述,我们需要调用SysTick_Config函数来实现定时器,同时设置定时周期为1ms。需要在主函数中进行调用。

    其次,需要在定时器中断服务函数TimingDelay_Decrement()中,对于需要延时的时间进行计数,直到计数器减为0时,完成延时操作。

    最后,对于四盏灯进行循环点亮,可以使用GPIO控制四个引脚的状态,使其循环点亮即可。

    代码实现如下:

    #include "main.h"
    
    uint32_t TimingDelay;
    
    void SysTick_Configuration(void)
    {
        if(SysTick_Config(SystemCoreClock / 1000))   // 设置系统时钟为168MHz,中断周期为1ms
        { 
            /* Capture error */ 
            while (1);
        }
    }
    
    void TimingDelay_Decrement(void)
    {
        if (TimingDelay != 0)
        { 
            TimingDelay--;
        }
    }
    
    void Delay(__IO uint32_t nTime)
    { 
        TimingDelay = nTime;
        while(TimingDelay != 0);
    }
    
    int main(void)
    {
        HAL_Init();
        // 其他初始化内容
    
        // 点亮四个LED灯
        while(1)
        {
            // 点亮第一个LED
            HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);  // 点亮引脚 
            Delay(1000); // 延时1s
            HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); // 关闭引脚
    
            // 同理,点亮其他三个LED
            HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
            Delay(1000);
            HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
    
            HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET);
            Delay(1000);
            HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET);
    
            HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_RESET);
            Delay(1000);
            HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, GPIO_PIN_SET);
        }
    }
    
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632