复旦微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高度类似,不再展示。

使用集成示波器,执行五项常见调试任务
简单介绍一下如何制定会报时的电子表
想转行做大数据 技术门槛比较高
英特尔推云端AI芯片 拟联手国内厂商开发AI服务器
如何防止电路中的闩锁问题
复旦微FM33LG048软件I2C驱动OLED的demo 帮助新手快速从STM32上手FM33
不知道这些功能你的新买的算iPhone白买了!
PLC故障排查步骤
电阻式触摸屏的基本结构介绍和驱动原理
GRANDMICRO有容微:闲聊物联网射频芯片
MSP430™ MCU 又一新玩法,解锁简易肺活量测试仪
主流的深度学习模型有哪些?AI开发工程师必备!
雷曼光电十七年积累或将迎来收获季
特斯拉亚太首座机场超级充电站上线,目前只拥有 8 个充电桩
简易病房呼叫器电路图
三星第三代10nm工艺DDR4内存下半年量产
语言建模中XLNet比BERT好在哪里
国内芯片行业暴露短板_“中国芯”崛起还要多久?
如何判别驻极体话筒的极性
用电子管6N3代替CD运放LPF输出实例