[RISC-V MCU 应用开发] 【RISC-V MCU CH32V103测评】流水灯程序测试

[复制链接]
 楼主| hbzjt2011 发表于 2020-12-7 20:12 | 显示全部楼层 |阅读模式
本帖最后由 hbzjt2011 于 2020-12-7 20:15 编辑

         熟悉了CH32V103处理器在MounRiver Studio下的开发流程以后,开始利用评估板上的外设和硬件资源进行程序的编写。首先评估板上自带两个LED灯,可以用来做流水灯和PWM呼吸灯。
204795fce18423b80c.png
         在已有的程序结构中添加Hardware->LED文件夹,同时将LED.c源文件和led.h头文件增加到项目中。同时需要将头文件路径添加到头文件目录中,在MounRiver Studio软件中的构建设置中增加LED目录。
512055fce1820678bb.png
263215fce1897e5afd.png
609205fce196710148.png

然后分别在led.c中编写LED端口初始化程序,包括控制端口时钟使能以及端口参数设置;在头文件中增加函数原型声明和相关的宏定义。
led.c文件:
  1. #include "led.h"

  2. void LED_Init(void)
  3. {

  4. GPIO_InitTypeDef  GPIO_InitStructure;                      //定义一个GPIO_InitTypeDef类型的结构体

  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);      //使能与LED相关的GPIO端口时钟

  6. GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN;       //配置GPIO引脚
  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           //设置GPIO模式为推挽输出
  8. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;          //设置GPIO口输出速度
  9. GPIO_Init(LED_PORT, &GPIO_InitStructure);                     //调用库函数,初始化GPIOA

  10. GPIO_SetBits(LED_PORT,LED1_PIN | LED2_PIN);                 //设置引脚输出高电平

  11. }
led.h文件:
  1. #ifndef __LED_H
  2. #define __LED_H

  3. #include "ch32v10x_conf.h"

  4. #define LED_PORT GPIOA
  5. #define LED1_PIN GPIO_Pin_0
  6. #define LED2_PIN GPIO_Pin_1

  7. #define LED1_ON  (GPIO_WriteBit(LED_PORT, LED1_PIN, Bit_RESET))
  8. #define LED1_OFF (GPIO_WriteBit(LED_PORT, LED1_PIN, Bit_SET))

  9. #define LED2_ON  (GPIO_WriteBit(LED_PORT, LED2_PIN, Bit_RESET))
  10. #define LED2_OFF (GPIO_WriteBit(LED_PORT, LED2_PIN, Bit_SET))

  11. #define LED1_Toggle (GPIO_WriteBit(LED_PORT, LED1_PIN, (1-GPIO_ReadOutputDataBit(LED_PORT, LED1_PIN))))
  12. #define LED2_Toggle (GPIO_WriteBit(LED_PORT, LED2_PIN, (1-GPIO_ReadOutputDataBit(LED_PORT, LED2_PIN))))

  13. void LED_Init(void);  //初始化

  14. #endif
main.c文件:
  1. int main(void)
  2. {
  3.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  4.     Delay_Init();
  5.         USART_Printf_Init(115200);
  6.         printf("SystemClk:%d\r\n",SystemCoreClock);

  7.         printf("This is printf example\r\n");

  8.         LED_Init();

  9.         LED1_ON;
  10.         LED2_OFF;

  11.         while(1)
  12.     {
  13.             LED1_Toggle;
  14.             LED2_Toggle;
  15.             Delay_Ms(500);
  16.         }
  17. }
对编写完成后的程序进行编译和下载到开发板验证,效果如下。
QQ图片20201207200823.gif




kiwis66 发表于 2021-6-22 09:31 | 显示全部楼层
LED1_Toggle这个宏定义不错
tail066 发表于 2021-7-3 13:55 | 显示全部楼层
恩,我其实也想玩玩CH的片子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎参与LabVIEW版块的讨论学习! 点我一键即达

256

主题

2827

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:欢迎参与LabVIEW版块的讨论学习! 点我一键即达

256

主题

2827

帖子

44

粉丝
快速回复 在线客服 返回列表 返回顶部