回答:
首先,根据参考资料中的段落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);
}
}