cczzgg 发表于 2022-2-22 16:18:12

沁恒CH32V103C8T6点亮LED

流水灯逻辑图:
      初始化GPIO引脚--红绿蓝三灯同时亮--延时--亮红灯,灭蓝灯--延时--亮绿灯,灭红灯--延时--亮蓝灯,灭绿灯--延时
步骤:
      1.使能GPIOB端口时钟。
      2.配置LED引脚为推挽输出,最高输出频率为50MHz。
      3.设置GPIO引脚电平,低电平点亮LED灯,高电平熄灭LED灯。
在程序中新建bsp文件,然后在bsp文件夹下新建bsp_gpio.c文件和bsp_gpio.h文件。
配置bsp_gpio.c文件:

    #include "ch32v10x.h"
    //LED IO初始化
    void Bsp_Gpio_Init(void)
    {
       GPIO_InitTypeDef   GPIO_InitStructure;
       //使用PB端口时钟
       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;//端口配置
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度
       GPIO_Init(GPIOB, &GPIO_InitStructure);//根据设定参数初始化GPIO

       GPIO_SetBits(GPIOB,GPIO_Pin_3);
       GPIO_SetBits(GPIOB,GPIO_Pin_4);
       GPIO_SetBits(GPIOB,GPIO_Pin_5);
   }

配置bsp_gpio.h文件:
#ifndef _BSP_GPIO_H
#define _BSP_GPIO_H

#include "ch32v10x.h"

   void Bsp_Gpio_Init(void);
   #endif
在main.c文件中包含gpio.h文件。并写下流水灯代码:
int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        Delay_Init();
        USART_Printf_Init(115200);
        Bsp_Gpio_Init();
        printf("SystemClk:%d\r\n",SystemCoreClock);

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

        while(1)
        {
          GPIO_SetBits(GPIOB, GPIO_Pin_5);
          GPIO_ResetBits(GPIOB, GPIO_Pin_3);
          Delay_Ms(1000);

          GPIO_SetBits(GPIOB, GPIO_Pin_3);
          GPIO_ResetBits(GPIOB, GPIO_Pin_4);
          Delay_Ms(1000);

          GPIO_SetBits(GPIOB, GPIO_Pin_4);
          GPIO_ResetBits(GPIOB, GPIO_Pin_5);
          Delay_Ms(1000);

        }
}


页: [1]
查看完整版本: 沁恒CH32V103C8T6点亮LED