[RISC-V MCU 应用开发]

【RISC-V MCU CH32V103测评】流水灯程序测试

[复制链接]
4347|2
手机看帖
扫描二维码
随时随地手机跟帖
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文件:
#include "led.h"

void LED_Init(void)
{

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

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

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

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

}
led.h文件:
#ifndef __LED_H
#define __LED_H

#include "ch32v10x_conf.h"

#define LED_PORT GPIOA
#define LED1_PIN GPIO_Pin_0
#define LED2_PIN GPIO_Pin_1

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

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

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

void LED_Init(void);  //初始化

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

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

        LED_Init();

        LED1_ON;
        LED2_OFF;

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




使用特权

评论回复

相关帖子

kiwis66| | 2021-6-22 09:31 | 显示全部楼层
LED1_Toggle这个宏定义不错

使用特权

评论回复
tail066| | 2021-7-3 13:55 | 显示全部楼层
恩,我其实也想玩玩CH的片子

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

157

主题

2338

帖子

40

粉丝