本帖最后由 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,看看现象:
|