【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");//
}
}