前期资料

外形

GD32F103-初次接触-编程之家

GD32F103-初次接触-编程之家

原理图

GD32F103-初次接触-编程之家

参考手册

1.芯片数据手册

2.用户手册

3.固件库使用指南

固件库解析

外设缩写

一些不常见的外设缩写。

BKP 备份寄存器

DBG 调式模块

ENET 以太网控制模块Ethernet

EXMC 外部存储器控制

EXTI 外部中断事件控制器

FMC 闪存控制器

GPIO/AFIO 通用/备用输入输出接口 alternate备用的、替代的、交替的,所以AFIO可翻译为“备用功能I/O”

MISC 嵌套中断向量列表控制器

PMU 电源管理单元

RCU 复位和时钟单元

SDIO SDIO(Secure Digital Input and Output)中文名称:安全数字输入输出,定义了一种外设接口。

USBD 通用串行总线全速设备接口

USBFS 通用串行总线全速接口

GD3210x_Firmware_Libary

GD32F103-初次接触-编程之家

GD32F103-初次接触-编程之家

GPIO-LED-Key

原理图

GD32F103-初次接触-编程之家

测试代码

和32不同的地方在GPIO的配置,相关的库函数不一样。

#include "gd32f10x.h"                   // Device header
#include "systick.h"void Key_Init(void)
{rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1);	// APB2时钟分频设置 PC14属于APB2的外设rcu_periph_clock_enable(RCU_GPIOC);		//使能RCU_GPIOCgpio_init(GPIOC, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_14);
}uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;if (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0){Delay_ms(20);while (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0);Delay_ms(20);KeyNum = 1;}if (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0){Delay_ms(20);while (gpio_input_bit_get(GPIOC, GPIO_PIN_14) == 0);Delay_ms(20);KeyNum = 2;}return KeyNum;
}

比如上面按键的初始化中,时钟先选择分频系数rcu_apb2_clock_config之后,再使能rcu_periph_clock_enable。

GPIO的配置,也有了一个初始化函数gpio_init,不用一个一个的写结构体的参数。

 I2C-OLED

一个很bug的函数gpio_bit_write

/*!brief      write data to the specified GPIO pinparam[in]  gpio_periph: GPIOx(x = A,B,C,D,E,F,G) param[in]  pin: GPIO pinone or more parameters can be selected which are shown as below:arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALLparam[in]  bit_value: SET or RESETarg        RESET: clear the port pinarg        SET: set the port pinparam[out] noneretval     none
*/
void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value)
{if(RESET != bit_value){GPIO_BOP(gpio_periph) = (uint32_t)pin;}else{GPIO_BC(gpio_periph) = (uint32_t)pin;}
}

bit_value 只能是SET or RESET 想弄成 0 1

解决办法:

GD32F103-初次接触-编程之家

GD32F103-初次接触-编程之家

GD32F103-初次接触-编程之家

搞了一天,I2C驱动OLED,没想到问题出在时钟上,不仅要打开GPIO的时钟,I2C也要同时打开。

GD32F103-初次接触-编程之家