复旦微FM33LG048软件I2C驱动OLED的demo 帮助新手快速从STM32上手FM33

描述

demo任务:利用复旦微FM33LG048外设I2C驱动OLED显示

demo目的:通过demo熟悉复旦微的I2C、GPIO外设,帮助复旦微的新学习者快速了解复旦微库函数

demo设备:MCU——FM33LG048;OLED——四针脚OLED,型号:JMD096D.

 

 

移植教程:

#include "main.h"

#include "fm33_assert.h"

 

#include "OLED.h"

/*********************************************主函数*******************************************/

int main(void)

{

/* Initialize FL Driver Library */

FL_Init();

 

/* Configure the system clock */

MF_Clock_Init();  

  OLED_Init(); // 初始化OLED

OLED_ShowString(2,1,"hello");  //显示hello字符串

}

FL_Init();在复旦微官方例程中已经给出,未修改任何代码,故这里不再赘述。

 

MF_Clock_Init();主要用于初始化各外设以及配置系统时钟,需要注意,为了方便移植OLED,将MF_Clock_Init()中GPIO初始化相关代码移动到OLED.c文件中。

 

demo所用函数如下,直观展示了与SMT32的对比,方便新手快速从SMT32入手复旦微FM33。

 

/******************************************************复旦微GPIO初始化************************************************************************************/

void MF_I2C_MASTER_Init(void)void MF_I2C_MASTER_Init(void)

{   

FL_GPIO_InitTypeDef    GPIO_InitStruct;

    FL_I2C_MasterMode_InitTypeDef    I2C_InitStruct;

    /* PA11 I2C_SCL */    

GPIO_InitStruct.pin = FL_GPIO_PIN_11;   

GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;   

GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; 

  GPIO_InitStruct.pull = FL_DISABLE;   

GPIO_InitStruct.remapPin = FL_DISABLE; 

  GPIO_InitStruct.analogSwitch = FL_DISABLE;   

FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* PA12 I2C_SDA */    

GPIO_InitStruct.pin = FL_GPIO_PIN_12; 

  GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;   

GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL; 

 

GPIO_InitStruct.pull = FL_DISABLE;

GPIO_InitStruct.remapPin = FL_DISABLE;

GPIO_InitStruct.analogSwitch = FL_DISABLE;

FL_GPIO_Init(GPIOA, &GPIO_InitStruct);

I2C_InitStruct.clockSource = FL_CMU_I2C_CLK_SOURCE_RCHF;

I2C_InitStruct.baudRate = 100000;

FL_I2C_MasterMode_Init(I2C, &I2C_InitStruct); }

以下是STM32的GPIO初始化

 

/*****************************************************SMT32 GPIO初始化**********************************************/

 

void OLED_I2C_Init(void)

{

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

   

    GPIO_InitTypeDef GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

    GPIO_Init(GPIOB, &GPIO_InitStructure);

   

    OLED_W_SCL(1);

    OLED_W_SDA(1);

}

需要注意,在复旦微库函数中,没有STM32的GPIO_WriteBit(*GPIOx,GPIO_Pin_x,Value)对应的库函数,需要自己封装。

以下给出两者代码不同之处

/**************************************STM32向特定引脚写入0,1数据********************************************/

#define OLED_W_SCL(x)       GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x))

#define OLED_W_SDA(x)       GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x))

BitAction为枚举类型,只能是0或1

/*************************************复旦微向特定引脚写入0,1数据*********************************************/

void OLED_W_SCL(uint8_t x)

{ if(x==0)

      { FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_11); }

else

{ FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_11); } }

 

void OLED_W_SDA(uint8_t x)

{ if(x==0)

        { FL_GPIO_ResetOutputPin(GPIOA,FL_GPIO_PIN_12); }

else

        { FL_GPIO_SetOutputPin(GPIOA,FL_GPIO_PIN_12); }}

完整代码在附件。

其他部分复旦微FM33与SMT32高度类似,不再展示。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分