当前位置: 首页 > article >正文

【WCH】基于Keil环境CH32F203 GPIO点灯实验

【WCH】基于Keil环境CH32F203 GPIO点灯实验


  • 📌相关篇《关于CH32F203程序下载方式说明》

✨如果是首次入门使用,请先看上面的相关篇内容,了解其下载相关事宜后,再进来学习。

GPIO模式介绍

  • 🌿在应用手册的第十章介绍GPIO。

GPIO 口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏
功能。GPIO 口还可以复用成其他功能。

  • 🌴GPIO模式:
  • 浮空输入
  • 上拉输入
  • 下拉输入
  • 模拟输入
  • 开漏输出
  • 推挽输出
  • 复用功能的输入和输出
    在这里插入图片描述
    GPIO外部中断,复用功能和其他单片机差不多。有一个特别的就是锁定机制功能。
  • 🔖锁定机制

锁定机制可以锁定 IO 口的配置。经过特定的一个写序列后,选定的 IO 引脚配置将被锁定,在下
一个复位前无法更改。

外设的 GPIO 设置一览表:

在这里插入图片描述

📝点灯程序代码

  • 📋参考CH32F203 官方的SDK固件包,中的GPIO案例修改而来,修改了IO口状态翻转的相关代码。
#include "debug.h"

/* Global define */


/* Global Variable */


/*********************************************************************
 * @fn      GPIO_Toggle_INIT
 *
 * @brief   Initializes GPIOA.0
 *
 * @return  none
 */
void GPIO_Toggle_INIT(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}

/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    uint8_t i = 0;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);  //9600 0000

    printf("GPIO Toggle TEST2\r\n");
    GPIO_Toggle_INIT();

    while (1)
    {
        Delay_Ms(250);
        Delay_Ms(250);
        GPIO_WriteBit(GPIOA, GPIO_Pin_1, (BitAction)(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)));
        i = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13);
        GPIO_WriteBit(GPIOC, GPIO_Pin_13, (i == 0) ? Bit_SET : Bit_RESET);
        Delay_Ms(250);
        Delay_Ms(250);
        printf("Hello World! \r\n");//


    }
}

http://www.kler.cn/a/8201.html

相关文章:

  • 5G 现网信令参数学习(3) - RrcSetup(1)
  • 吾店云介绍 – 中国人的WordPress独立站和商城系统平台
  • 晨控RFID技术助力半导体制造业革新之路
  • 计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
  • 电脑不显示wifi列表怎么办?电脑不显示WiF列表的解决办法
  • day12:版本控制器
  • 全国青少年电子信息智能创新大赛(复赛)python·模拟三卷,含答案解析
  • 1mm³大小,世界首个功率破KW的单芯片激光模组诞生
  • Unity入门开发资源链接
  • Flask项目运行报错解决:sqlalchemy.exc.OperationalError
  • 给boss直聘的搜索结果加上hr活跃状态,少看点半年活跃的岗位
  • C++整人代码,十分朴实但威力无穷,让你对cout怀疑人生,整死你的同学
  • 线性回归讲解
  • 阿里巴巴春招的后端面经来啦~
  • yolov5-v7.0实例分割快速体验
  • CIE (PCI Express) 1x, 4x, 8x, 16x总线端子说明
  • 4.7--计算机网络之TCP篇之socket编程--(复习+深入)---好好沉淀,加油呀
  • 版本控制工具Git的常见命令与使用方法
  • 编程的核心目的:计算数据
  • 二、Java 并发编程(1)
  • 20230404英语学习
  • Javase学习文档------数组
  • 使用spring boot拦截器实现青少年模式
  • Nuxt项目动态路由带参接参
  • 【从零开始学习 UVM】12.3、UVM RAL(续更) —— RAL Classes Methods
  • java微服务商城高并发秒杀项目--008.订单服务继承Sentinel以及sentinel安装dashboard