1897|3

565

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【N32L43x评测】2、点灯,blink,blink,blink…… [复制链接]

 

1、前言:

官方的demo用的阻塞方式点灯,即就是死等,在等待期间mcu干不了其他事情(中断除外),这种方式不太友好,本文使用非阻塞方式点灯。

 

2、硬件连接

3、思路

利用定时器中断,每1ms中断一次,整个系统维护一个tick计数;

记录某一时刻的tick,用A表示,再获取当前的tick,用B表示,如果当前的B-A大于等于500(这里500ms闪烁一次),那么就执行一次led翻转,同时也更新A的值。

 

4、软件实现

(1)利用定时器中断,每1ms中断一次,整个系统维护一个tick计数

static uint32_t SystemTick=0;

void TimerConfig(void)
{
	NVIC_InitType NVIC_InitStructure;
	TIM_TimeBaseInitType TIM_TimeBaseStructure;

	RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM2, ENABLE);

    /* Enable the TIM2 global Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel                   = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority        = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;

    NVIC_Init(&NVIC_InitStructure);
	
	//TIMER2CLK = SystemCoreClock/(107+1) = 1MHz, the period is 1s((999+1)/1000000 = 0.001s=1ms).

    /* Time base configuration */
    TIM_TimeBaseStructure.Period    = 107;
    TIM_TimeBaseStructure.Prescaler = 999;
    TIM_TimeBaseStructure.ClkDiv    = TIM_CLK_DIV1;
    TIM_TimeBaseStructure.CntMode   = TIM_CNT_MODE_UP;

    TIM_InitTimeBase(TIM2, &TIM_TimeBaseStructure);
	
	
	/* TIM IT enable */
    TIM_ConfigInt(TIM2, TIM_INT_UPDATE , ENABLE);

    /* TIM2 enable counter */
    TIM_Enable(TIM2, ENABLE);
}


void TIM2_IRQHandler(void)
{
    if (TIM_GetIntStatus(TIM2, TIM_INT_UPDATE) != RESET)
    {
        TIM_ClrIntPendingBit(TIM2, TIM_INT_UPDATE);
		SystemTick++;
    }
}


uint32_t SystemGetTick(void)
{
	return SystemTick;
}

 

(2)LED翻转

{
    GPIO_InitType GPIO_InitStructure;
	
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
	RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE);


	GPIO_InitStruct(&GPIO_InitStructure);
    GPIO_InitStructure.Pin        = GPIO_PIN_8;
    GPIO_InitStructure.GPIO_Current = GPIO_DC_12mA;
    GPIO_InitStructure.GPIO_Pull    = GPIO_No_Pull;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin        = GPIO_PIN_4|GPIO_PIN_5;
    GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
}


void SystemRun(void)
{
	static uint32_t curtick=0;
	static uint8_t state=0;
	
	if(SystemGetTick()-curtick>=500)
	{
		if(state)
		{
			GPIO_SetBits(GPIOA, GPIO_PIN_8);
			GPIO_SetBits(GPIOB, GPIO_PIN_4|GPIO_PIN_5);

		}
		else
		{
			GPIO_ResetBits(GPIOA, GPIO_PIN_8);
			GPIO_ResetBits(GPIOB, GPIO_PIN_4|GPIO_PIN_5);
		}
		curtick=SystemGetTick();
		state=!state;
	}	
}

 

5、现象

led blink

 

 

 

最新回复

三色灯为啥不直接用三色灯,,,   详情 回复 发表于 2022-7-5 17:37
点赞 关注
个人签名stm32/LoRa物联网:304350312
 
 

回复
举报

7048

帖子

11

TA的资源

版主

沙发
 
很精彩的作品哦,大家可以学习定时器,来做做状态转换!
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

三色灯为啥不直接用三色灯,,,

点评

这就要问官方设计人员了  详情 回复 发表于 2022-7-5 19:21
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

565

帖子

0

TA的资源

一粒金砂(高级)

4
 
freebsder 发表于 2022-7-5 17:37 三色灯为啥不直接用三色灯,,,

这就要问官方设计人员了

个人签名stm32/LoRa物联网:304350312
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表