本帖最后由 freeelectron 于 2023-5-5 11:29 编辑
#申请原创#
本文主要实现以下功能:
最简单的方式是用的阻塞方式点灯,即就是死等,在等待期间mcu干不了其他事情(中断除外),这种方式不太友好,本文使用非阻塞方式点灯;
普通定时器1ms一次中断,为整个系统应用层提供时钟。
1、定时器4配置为1ms中断一次static uint32_t SystemTick=0;
void TimerInit(void)
{
TIMR_Init(TIMR4, TIMR_MODE_TIMER, CyclesPerUs, 1000, 1); //每1ms秒钟触发一次中断 //1000 000
TIMR_Start(TIMR4);
}
void TIMR4_Handler(void)
{
TIMR_INTClr(TIMR4);
SystemTick++;
}
uint32_t GetSystemTick(void)
{
return SystemTick;
}
2、非阻塞点灯,500ms闪烁一次void LedInit(void)
{
GPIO_Init(GPIOA, PIN5, 1, 0, 0, 0); //输出,接LED
}
void SystemRun(void)
{
static uint32_t curtick=0;
if(GetSystemTick()-curtick>=500)
{
GPIO_InvBit(GPIOA, PIN5); //反转LED亮灭状态
curtick=GetSystemTick();
}
}
3、焊接J6、J19,将LED和PA5使用杜邦线连接起来
最后,上个gif,看看现象:
|