面包板社区的各位朋友,大家好!
话不多说直接进入测评吧。
收到开发板之后,先看了一遍原理图,官方提供的开发板上面的外设还是非常丰富的。不过IO口的数量有限,在使用的时候一定要注意IO口的复用问题。
目前社区里面的测评也不少,在初步的查阅之后,也决定写一篇自己的测评,关于PWM的渐变输出的。
开发板使用手册链接:.
提取码:zdov
程序的下载与驱动的安装视频:
首先根据这篇文章创建了自己的按键任务:
接下来是PWM的初始化,打开driver_pwm.c文件,找到对应的初始化函数:

这款芯片的大多数IO口都具备复用功能,可以根据自己的需要选择配置为输出的IO口,我这边选用的是 PD5PD7IO口对应的复用功能可以在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的循环加减,其中PWM1PWM5两路互补。