最近做项目需要用到物联网开发板,刚好看到萤火工场出了新品,便申请了一片来试试。
到手后先看外观,这板子做工确实扎实,边缘处理得很光滑,没有毛刺。最让我惊喜的是丝印 —— 每个引脚旁都印着清晰的标识,完全不用对着原理图翻来翻去。
上一代产品是没有丝印的,接个传感器得反复核对引脚图,稍不注意就接错,调试时特别耽误时间。这次新品加了丝印,虽然是个小改动,却实实在在解决了开发者的痛点,对新手友好度提升了不少,能明显感觉到厂商在细节上用了心。整体来看,这板子不仅颜值在线,实用性也很能打,后续项目开发应该能省不少事。
下面是产品的实物图:

以下是开发板原理图:

以下是移植过程:
在江科大OLED显示资料里下载要移植的代码OLED.c、OLED.h、OLED_Data.c、OLED_Data.h(UTF8格式的,不然会乱码)
然后创建工程目录,将文件放进来:

选择Project选项,打开properties

接下来添加头文件目录

再然后打开我们的OLED.c文件,将下面三个函数修改
void OLED_W_SCL(uint8_t BitValue)
{
/*根据BitValue的值,将SCL置高电平或者低电平*/
gpio_bit_write(GPIOA,GPIO_PIN_3,BitValue);
/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/
//...
}
/**
* 函 数:OLED写SDA高低电平
* 参 数:要写入SDA的电平值,范围:0/1
* 返 回 值:无
* 说 明:当上层函数需要写SDA时,此函数会被调用
* 用户需要根据参数传入的值,将SDA置为高电平或者低电平
* 当参数传入0时,置SDA为低电平,当参数传入1时,置SDA为高电平
*/
void OLED_W_SDA(uint8_t BitValue)
{
/*根据BitValue的值,将SDA置高电平或者低电平*/
gpio_bit_write(GPIOA,GPIO_PIN_4,BitValue);
/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/
//...
}
/**
* 函 数:OLED引脚初始化
* 参 数:无
* 返 回 值:无
* 说 明:当上层函数需要初始化时,此函数会被调用
* 用户需要将SCL和SDA引脚初始化为开漏模式,并释放引脚
*/
void OLED_GPIO_Init(void)
{
uint32_t i, j;
/*在初始化前,加入适量延时,待OLED供电稳定*/
for (i = 0; i < 1000; i ++)
{
for (j = 0; j < 1000; j ++);
}
/*将SCL和SDA引脚初始化为开漏模式*/
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3 | GPIO_PIN_4);
gpio_output_options_set(GPIOA, GPIO_OTYPE_OD, GPIO_OSPEED_25MHZ,GPIO_PIN_3 | GPIO_PIN_4);
/*释放SCL和SDA*/
OLED_W_SCL(1);
OLED_W_SDA(1);
}
一键获取完整项目代码
修改为GD32的过程代码
void OLED_W_SCL(uint8_t BitValue)
{
/*根据BitValue的值,将SCL置高电平或者低电平*/
/*改为你自己的引脚*/
gpio_bit_write(GPIOA,GPIO_PIN_3,BitValue);
/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/
//...
}
/**
* 函 数:OLED写SDA高低电平
* 参 数:要写入SDA的电平值,范围:0/1
* 返 回 值:无
* 说 明:当上层函数需要写SDA时,此函数会被调用
* 用户需要根据参数传入的值,将SDA置为高电平或者低电平
* 当参数传入0时,置SDA为低电平,当参数传入1时,置SDA为高电平
*/
void OLED_W_SDA(uint8_t BitValue)
{
/*根据BitValue的值,将SDA置高电平或者低电平*/
/*改为你自己的引脚*/
gpio_bit_write(GPIOA,GPIO_PIN_4,BitValue);
/*如果单片机速度过快,可在此添加适量延时,以避免超出I2C通信的最大速度*/
//...
}
/**
* 函 数:OLED引脚初始化
* 参 数:无
* 返 回 值:无
* 说 明:当上层函数需要初始化时,此函数会被调用
* 用户需要将SCL和SDA引脚初始化为开漏模式,并释放引脚
*/
void OLED_GPIO_Init(void)
{
uint32_t i, j;
/*在初始化前,加入适量延时,待OLED供电稳定*/
for (i = 0; i < 1000; i ++)
{
for (j = 0; j < 1000; j ++);
}
/*将SCL和SDA引脚初始化为开漏模式*/
/*改为你自己的引脚*/
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3 | GPIO_PIN_4);
gpio_output_options_set(GPIOA, GPIO_OTYPE_OD, GPIO_OSPEED_25MHZ,GPIO_PIN_3 | GPIO_PIN_4);
/*释放SCL和SDA*/
OLED_W_SCL(1);
OLED_W_SDA(1);
}
接下来与我们再STM32中的用法就一样啦,就可以愉快的食用啦
