很幸运这次能申请到中科蓝讯AB32VG1开发板,AB32VG1作为一颗RISC-V架构的国产芯,集成了192K RAM、8Mbit Flash、ADC、PWM、USB、UART、IIC等资源,在开发产品时,给工程师多提供了一种选择。开始点灯:
安装SDK资源包
点击工具栏上SDK管理器,在弹窗上依次勾选安装RT-Thread_Source_Code latest、AB32VG1-AB-PROUGEN 1.0.8、ToolChain_Support_Packages/RISC-V-GCC 10.1.0资源包
0.png
新建工程
点击文件->新建->RT-Thread项目,弹出新建项目窗口,选择基于开发板,填写项目名AB32VG1_BreathingLamp,开发板选择AB32VG1-AB-PROUGEN,完成新建项目
1.png
2.png
右击项目工程名,选择下拉菜单中“属性”,弹出属性框,选择MCU->RISC-V Toolchains Paths,修改配置ToolChain folder路径为 D:\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\RISC-V\RISC-V-GCC\10.1.0\bin
4.png
查看开发板原理图AB32VG1_Prougen_Schematic_V02,RGB LED分别通过短路帽连接到芯片PE1、PE4、PA1引脚,这里通过杜邦线将LED蓝色控制脚连接到芯片PB0 (Timer3PWM)引脚
微信图片_20210830233221.png 微信图片_20210830233226.png
微信图片_20210831230629.jpg
配置PWM
双击项目的RT-Thread Setting,进入配置界面,点击更多配置
微信图片_20210831231007.png
进入更多配置后,选择硬件选项,使能PB0引脚PWM,保存配置
微信图片_20210831231011.png
在application文件夹中,新建pwm.c文件
微信图片_20210831232014.png
编写pwm程序:
  1. #define PWM_DEV_NAME "t3pwm"   /* PWM设备名称 */
  2. #define PWM_DEV_CHANNEL 1      /* PWM通道 */
  3. struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */
  4. rt_uint32_t period, pulse;
  5. rt_uint8_t direction = 0;
  6. void Pwm_Init(void)
  7. {
  8.     period = 1000; /* 周期值,1M/period kHz */
  9.     pulse = 0;     /* PWM脉冲宽度值,占空比=pulse/period */
  10.     //查找t3pwm是否在系统设备注册表中
  11.     pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
  12.     if (pwm_dev == RT_NULL)
  13.     {
  14.         rt_kprintf("Can't find device:%s\n", PWM_DEV_NAME);
  15.         return;
  16.     }
  17.     /* 设置PWM周期、脉冲宽度 */
  18.     rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
  19.     /* 使能设备 */
  20.     rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
  21. }
  22. //PWM线程函数
  23. static void PWM_Thread_Entry(void *para)
  24. {
  25.     Pwm_Init();
  26.     while(1)
  27.     {
  28.         //蓝灯呼吸灯闪烁
  29.         if(direction == 0)
  30.         {
  31.             pulse += 10;
  32.             if(pulse >= period - 10)
  33.             {
  34.                 direction = 1;
  35.                 pulse = period - 10;
  36.             }
  37.         }
  38.         else
  39.         {
  40.             pulse -= 10;
  41.             if(pulse < 1)
  42.             {
  43.                 direction = 0;
  44.                 pulse = 0;
  45.             }
  46.         }
  47.         rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
  48.         rt_thread_mdelay(2);
  49.     }
  50. }
  51. //动态创建PWM线程启动函数
  52. int Pwm_Thread_Init(void)
  53. {
  54.     rt_thread_t pwm_thread;
  55.     pwm_thread = rt_thread_create(
  56.             "pwm_thread",
  57.             PWM_Thread_Entry,
  58.             RT_NULL,
  59.             1024,
  60.             10,
  61.             10);
  62.     if (pwm_thread != RT_NULL)
  63.     {
  64.         rt_thread_startup(pwm_thread);
  65.     }
  66.     return RT_EOK;
  67. }
  68. INIT_APP_EXPORT(Pwm_Thread_Init); //PWM线程初始化添加到系统初始化中
编译代码,使用下载工具Downloader下载程序
蓝色呼吸灯效果:
WeChat_20210831232556 (1).gif