NRF52840学习历程(十)PWM03_4通道独立控制之呼吸灯

时间在2021年2月5日,寒假放假在家好好学一学nRF52840

 

今天还在感冒,休息一波

 

开发板:初雪的100出头那块 NRF52840 EVAL KIT

下载工具:JINLK V11(最好是JLINK V9以上 也有人用JLINK OB也行,其他的下载器诸如STLINK,DAP不建议用)

版本号: KEIL5编程环境,CMSIS为5.3.0, NRF52840的CMSIS为8.35.0

参考资料: NRF52840-Eval-Kit-Schematic.pdf(原理图)

nRF5_SDK_17.0.2_d674dde(官方例程)

nRF5_SDK_17.0.0_offline_doc(官方文档)

nRF52840_PS_v1.1.pdf(官方数据手册)

 

已用IO

0.96OLED / 1.29彩色OLED

D0(CLK) -> 12

D1(SDA) -> 23

RES     -> 7

DC      -> 21

CS      -> 19

 

按键

KEY0 ->11

KEY1 ->24

KEY2 ->20

KEY3->17

 

LED

LED0 ->13

LED1->14

LED2->32+9=41

LED3->16

 

串口

TX ->6

RX ->8

 

ADC

光敏 -> 5

摇杆X -> 28

摇杆Y -> 29

 

IIC_0.96OLED

SDA -> 32

SCL -> 22

 

还没用到(空闲)

P0.0 1 2 3 9 10 15 25 26 27 30 31

P1.1 2 3 4 5 6 7 8 10 11 12 13 14 15

 

 

在02的基础上,修改中断函数如下即可

void MY_PWM_Interrupt(nrfx_pwm_evt_type_t event_type)
{
	if (event_type == NRF_DRV_PWM_EVT_FINISHED)//顺序播放完了。
	{
		static bool flag0=true,flag1=true,flag2=true,flag3=true;
		
		static uint16_t breath_pwm = 50; //调整呼吸时间
/*通道0---------------------------------*/		
		if(true == flag0)
		{
			my_pwm_sequ_val.channel_0 +=breath_pwm;
			
			if( my_pwm_sequ_val.channel_0 > My_PWM0_top_value)
				flag0 = false;
		}
		else 
		{
			my_pwm_sequ_val.channel_0 -=breath_pwm; 
			
			if( my_pwm_sequ_val.channel_0 < breath_pwm)
				flag0 = true;
		}	
/*通道1---------------------------------*/	
		if(true == flag1)
		{
			my_pwm_sequ_val.channel_1 +=breath_pwm;
			
			if( my_pwm_sequ_val.channel_1 > My_PWM0_top_value)
				flag1 = false;
		}
		else 
		{
			my_pwm_sequ_val.channel_1 -=breath_pwm; 
			
			if( my_pwm_sequ_val.channel_1 < breath_pwm)
				flag1 = true;
		}
/*通道2---------------------------------*/	
		if(true == flag2)
		{
			my_pwm_sequ_val.channel_2 +=breath_pwm;
			
			if( my_pwm_sequ_val.channel_2 > My_PWM0_top_value)
				flag2 = false;
		}
		else 
		{
			my_pwm_sequ_val.channel_2 -=breath_pwm; 
			
			if( my_pwm_sequ_val.channel_2 < breath_pwm)
				flag2 = true;
		}
/*通道3---------------------------------*/	
		if(true == flag3)
		{
			my_pwm_sequ_val.channel_3 +=breath_pwm;
			
			if( my_pwm_sequ_val.channel_3 > My_PWM0_top_value)
				flag3 = false;
		}
		else 
		{
			my_pwm_sequ_val.channel_3 -=breath_pwm; 
			
			if( my_pwm_sequ_val.channel_3 < breath_pwm)
				flag3 = true;
		}
		
	}
}

 

链接:https://pan.baidu.com/s/1dUROKCpq3fEZmr75blxHhg

提取码:zayx

复制这段内容后打开百度网盘手机App,操作更方便哦

猜你喜欢

转载自blog.csdn.net/jwdeng1995/article/details/113696271