RVB2601开发板试用2——PWM的使用,既三色小灯驱动

简介: PWM信号的使用,既三色LED驱动显示

本文作者:我爱下载

 

1 概述

RVB2601评估板包含RGB三基色LED一个,为了学习PWM信号的驱动,我们可以通过驱动三基色LED来完成。


2 硬件接口描述

1.jpg


通过如上两个原理图对照可知。

序号

LED名称

GPIO(PWM)

1

LED_BLUE

PA7(CH7)

2

LED_GREEN

PA25(CH2)

3

LED_RED

PA4(CH4)

 

3 软件驱动设计    

3.1 PWM的CSI接口

驱动采用CSI接口实现。实际使用到CSI接口如下所示:

函数

说明

csi_pwm_init

初始化

csi_pwm_uninit

反初始化

csi_pwm_out_config

配置输出模式

csi_pwm_out_start

开始输出

csi_pwm_out_stop

停止输出


PWM接口详细说明

  • csi_pwm_init
csi_error_t csi_pwm_init(csi_pwm_t *pwm, uint32_t idx)


csi_pwm_t

成员

类型

说明

dev

csi_dev_t

csi设备统一句柄

callback

void (callback)(csi_pwm_t pwm, csi_pwm_event_t event, uint32_t ch, uint32_t time_us, void *arg)

用户回调函数

arg

void *

回调函数参数(用户自定义)

priv

void *

设备私有变量


  • csi_pwm_uninit
void csi_pwm_uninit(csi_pwm_t *pwm)


  • csi_pwm_out_config
csi_error_t csi_pwm_out_config(csi_pwm_t *pwm, 
                                     uint32_t channel, 
                                     uint32_t period_us, 
                                     uint32_t pulse_width_us,
                                     csi_pwm_polarity_t polarity)


csi_pwm_polarity_t

类型

说明

PWM_POLARITY_HIGH

高电平

PWM_POLARITY_LOW

低电平


  • csi_pwm_out_start
csi_error_t csi_pwm_out_start(csi_pwm_t *pwm, uint32_t channel)


  • csi_pwm_out_stop
void csi_pwm_out_stop(csi_pwm_t *pwm, uint32_t channel)


3.2 PIN的CSI接口

测试中用到的PIN的CSI接口说明如下所示:

函数

说明

csi_pin_set_mux

设置PIN的复用功能


接口详细说明

  • csi_pin_set_mux
csi_error_t csi_pin_set_mux(pin_name_t pin_name, pin_func_t pin_func)


4 软件测试代码

通过PWM接口完成三色灯亮度渐变调节驱动的测试程序。


4.1 初始化

void led_pinmux_init()
{
    csi_error_t ret;
    csi_pin_set_mux(PA7, PA7_PWM_CH7);    //设置PIN的复用功能
    csi_pin_set_mux(PA25, PA25_PWM_CH2);  //设置PIN的复用功能
    csi_pin_set_mux(PA4, PA4_PWM_CH4);    //设置PIN的复用功能
    ret = csi_pwm_init(&r, 0);        //初始化pwm设备
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
}
//配置pwm通道的输出模式
    ret = csi_pwm_out_config(&r, 7 / 2, 300, 100, PWM_POLARITY_HIGH);
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
    }
//配置pwm通道的输出模式
    ret = csi_pwm_out_config(&r, 2 / 2, 300, 100, PWM_POLARITY_HIGH);
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
    }
//配置pwm通道的输出模式
    ret = csi_pwm_out_config(&r, 4 / 2, 300, 100, PWM_POLARITY_HIGH);
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
    }
}

image.gifimage.gif

4.2 三色led亮度PWM控制

  • 点亮led
csi_pwm_out_stop(&r, 2 / 2);
csi_pwm_out_stop(&r, 7 / 2);
csi_pwm_out_stop(&r, 4 / 2);

image.gifimage.gif

  • 熄灭led
csi_pwm_out_start(&r, 7 / 2);
csi_pwm_out_start(&r, 2 / 2);
csi_pwm_out_start(&r, 4 / 2);

image.gifimage.gif

  • 亮度调节控制
void  ft_led_slow_change(void)
{
    csi_error_t ret;
    if (g_led_refresh) {
        if (g_ctr == 0)
        {
      ret = csi_pwm_out_config(&r, 7 / 2, 300, led_pwm_count, PWM_POLARITY_HIGH);
      if (ret != CSI_OK) {
          printf("===%s, %d\n", __FUNCTION__, __LINE__);
          return ;
      }
      if(led_change_flag == 0)
      {
        if(led_pwm_count == 0)
        {
          csi_pwm_out_start(&r, 7 / 2);
          csi_pwm_out_stop(&r, 2 / 2);
          csi_pwm_out_stop(&r, 4 / 2);
        }
        led_pwm_count += 10;
        if(led_pwm_count >= 300)
        {
          led_change_flag = 1;
        }
      }
      else
      {
        if(led_pwm_count > 10)
        {
          led_pwm_count -= 10;
        }
        else
        {
          led_pwm_count = 0;
          led_change_flag = 0;
          g_ctr++;
          if (g_ctr == 3) {
              g_ctr = 0;
          }
        }
      }
        }
        else if (g_ctr == 1)
        {
        //25
      ret = csi_pwm_out_config(&r, 2 / 2, 300, led_pwm_count, PWM_POLARITY_HIGH);
      if (ret != CSI_OK) {
          printf("===%s, %d\n", __FUNCTION__, __LINE__);
          return ;
      }
      if(led_change_flag == 0)
      {
        if(led_pwm_count == 0)
        {
          csi_pwm_out_start(&r, 2 / 2);
          csi_pwm_out_stop(&r, 7 / 2);
          csi_pwm_out_stop(&r, 4 / 2);
        }
        led_pwm_count += 10;
        if(led_pwm_count >= 300)
        {
          led_change_flag = 1;
        }
      }
      else
      {
        if(led_pwm_count > 10)
        {
          led_pwm_count -= 10;
        }
        else
        {
          led_pwm_count = 0;
          led_change_flag = 0;
          g_ctr++;
          if (g_ctr == 3) {
              g_ctr = 0;
          }
        }
      }
        }
        else //2
        {
        //4
      ret = csi_pwm_out_config(&r, 4 / 2, 300, led_pwm_count, PWM_POLARITY_HIGH);
      if (ret != CSI_OK) {
          printf("===%s, %d\n", __FUNCTION__, __LINE__);
          return ;
      }
      if(led_change_flag == 0)
      {
        if(led_pwm_count == 0)
        {
          csi_pwm_out_start(&r, 4 / 2);
          csi_pwm_out_stop(&r, 7 / 2);
          csi_pwm_out_stop(&r, 2 / 2);
        }
        led_pwm_count += 10;
        if(led_pwm_count >= 300)
        {
          led_change_flag = 1;
        }
      }
      else
      {
        if(led_pwm_count > 10)
        {
          led_pwm_count -= 10;
        }
        else
        {
          led_pwm_count = 0;
          led_change_flag = 0;
          g_ctr++;
          if (g_ctr == 3) {
              g_ctr = 0;
          }
        }
      }
        }
    }
}


5 演示视频

>>>点击此处观看演示视频


本文源自:平头哥芯片开放社区(OCC)

相关文章
|
编解码
STM32:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)
STM32:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)
1409 1
STM32:PWM驱动舵机(内含:1.接线原理图/实物图+2.代码部分+3.补充知识部分)
|
3月前
|
存储 芯片
【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程(一)
【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程(一·)
173 0
|
3月前
|
存储
【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程(二)
【TFT彩屏移植】STM32F4移植1.8寸TFT彩屏简明教程(二)
114 0
|
6月前
|
异构计算
FPGA新起点V1开发板(十)——按键控制LED
FPGA新起点V1开发板(十)——按键控制LED
FPGA新起点V1开发板(十)——按键控制LED
|
6月前
stm32f407探索者开发板(十五)——NVIC中断优先级管理
stm32f407探索者开发板(十五)——NVIC中断优先级管理
293 0
|
6月前
|
前端开发 安全
stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析
stm32f407探索者开发板(十一)——SystemInit时钟系统初始化剖析
240 0
|
6月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
614 0
|
6月前
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
stm32f407探索者开发板(十六)——串行通信原理讲解-UART
337 0
|
8月前
|
IDE 开发工具 C++
【瑞萨MCU】玩转 RA2E1 之 e2 studio 点灯
【瑞萨MCU】玩转 RA2E1 之 e2 studio 点灯
110 0
|
8月前
|
IDE 物联网 开发工具
【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯
【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯

热门文章

最新文章

下一篇
开通oss服务