面包板社区的各位朋友,大家好!
话不多说直接进入测评吧。
收到开发板之后,先看了一遍原理图,官方提供的开发板上面的外设还是非常丰富的。不过IO口的数量有限,在使用的时候一定要注意IO口的复用问题。
目前社区里面的测评也不少,在初步的查阅之后,也决定写一篇自己的测评,关于PWM的渐变输出的。
开发板使用手册链接:.
提取码:zdov
程序的下载与驱动的安装视频:
首先根据这篇文章创建了自己的按键任务:
接下来是PWM的初始化,打开driver_pwm.c文件,找到对应的初始化函数:
这款芯片的大多数IO口都具备复用功能,可以根据自己的需要选择配置为输出的IO口,我这边选用的是 PD5和PD7,IO口对应的复用功能可以在driver_iomux.h里面查看。
确定之后进行初始化:
system_set_port_mux(GPIO_PORT_D,GPIO_BIT_7, PORTD7_FUNC_PWM1);
system_set_port_mux(GPIO_PORT_D,GPIO_BIT_5, PORTD5_FUNC_PWM5);
pwm_init(PWM_CHANNEL_1,1000,99);
pwm_init(PWM_CHANNEL_5,1000,1);
pwm_start(PWM_CHANNEL_1);
pwm_start(PWM_CHANNEL_5);
然后我们需要创建一个系统定时器来循环调整PWM的占空比:
//创建一个周期性50ms定时的系统定时器
os_timer_init(&my_timer_test,my_timer_test_func,NULL);
os_timer_start(&my_timer_test,50,1);
编写对应的定时器回调函数:
void my_timer_test_func(void *arg)
{
uint8_tLCD_ShowStringBuff[30];
switch(App_Mode)
{
caseMY_TEST_MODE:
get_pwm_high_duty();
pwm_stop(PWM_CHANNEL_1);
pwm_stop(PWM_CHANNEL_5);
pwm_update(PWM_CHANNEL_1,1000,pwm1_high_duty);
pwm_update(PWM_CHANNEL_5,1000,pwm2_high_duty);
pwm_start(PWM_CHANNEL_1);
pwm_start(PWM_CHANNEL_5);
sprintf((char*)LCD_ShowStringBuff,HIGH_DUTY,pwm1_high_duty,pwm2_high_duty);
LCD_ShowString(100,50,LCD_ShowStringBuff,BLUE);
break;
default:
break;
}
}
在get_pwm_high_duty()函数中实现PWM占空比0~99~0的循环加减,其中PWM1和PWM5两路互补。