【灵动FTHR-G0001开发板】驱OLED屏

分享作者:user201810275686
作者昵称:xcc1634125394
评测品牌:灵动微电子
评测型号:FTHR-G0001
申请理由(产品应用):作为一款入门级的32位MCU,成本低,外设基本上符合项目的需求,使用这款MCU开发一款印控仪,使用上位机软件通过串口给开发板下发指令,从而控制电机下压,盖上标准的印章,周围环境光线不明朗时,可以下发指令控制开启设备上的灯,协助外置的USB摄像机拍照;灵动微G0001适用多类应用场合,可广泛应用在8/16位MCU的升级需求,因此想再申请一块评测评测。
发布时间:2024-10-30 10:28:56
0
概要
国庆期间申请的灵动FTHR-G0001开发板,板子小巧玲珑,主控MCU封装小,开箱即用,Type-C接口,性价比极高。
开源口碑分享内容

      灵动FTHR-G0001开发板是官方主推的入门级32位MCU,搭载Arm Cortex-M0内核,主频可达48MHz,性价比非常高,可作为8/16位MCU的升级需求,可适用于多种类型的应用场合。MCU制作采用稳定可靠的12寸晶圆工艺平台。

        开发板的主要配置如下:

      FTHR-G0001板载仿真器,采用Type-C接口,通用性强。仿真器即MM32LINK-OB V1.0,支持SWD通信,虚拟COM端口(VCP)。板子支持二进制文件的拖放闪存编程,支持Web USB网页服务。使用Type-C数据线与PC端相连接,板上的LED指示灯闪烁。

       板子支持调试仿真,调试部分与核心主控部分是分离式设计,中间由小的过孔连接,如需使用该调试部分去烧录其它板子,可将板子掰断,单独使用烧录、调试。

        本次使用该板子驱动一块0.96’OLED屏,由于笔者手里头OLED模块有限,使用了“Grove Beginner Kit for Arduino开发板”,该开发板的资源链接: https://www.seeedstudio.com/Grove-Beginner-Kit-for-Arduino-p-4549.html ,这里只用到OLED屏部分。

        本次使用Keil开发,因此需要安装基于该MCU的pack支持包,“MindMotion.MM32G0001_DFP.0.9.0.pack”可通过灵动微官方网站( https://www.mindmotion.com.cn/support/software/keil_pack/ )获取,这里我们通过GPIO模拟IIC接口方式来驱动OLED屏。

硬件连接:

MM32G0001 Board                    Grove Beginner Kit for Arduino Board

PA5  ----------------------------  SCL

PA6  ----------------------------  SDA

3V3  ----------------------------  VCC

GND  ---------------------------  GND

部分参考代码:

主函数

int main(void)

{

   uint8_t t;

   PLATFORM_Init();

   OLED_Init();

   OLED_Clear();

   t=' ';

   while (1)

   {

GPIO_LED_Toggle_Sample();

OLED_Clear();

OLED_ShowString(6,3,"FTHR-G0001",16);

OLED_ShowString(6,6,"2024-10-21",16);

PLATFORM_DelayMS(500);

               OLED_Clear();

OLED_ShowString(16,3,"FTHR Board",16);

OLED_ShowChar(48,6,t,16);//显示ASCII字符

PLATFORM_DelayMS(50);

t++;

if(t>'~')t=' ';

OLED_ShowNum(103,6,t,3,16);//显示ASCII字符的码值

PLATFORM_DelayMS(1000);

   }

}

OLED初始化函数

#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_5)//SCL

#define OLED_SCLK_Set() GPIO_SetBits(GPIOA,GPIO_Pin_5)

#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOA,GPIO_Pin_6)//SDA

#define OLED_SDIN_Set() GPIO_SetBits(GPIOA,GPIO_Pin_6)

#define OLED_CMD  0 //写命令

#define OLED_DATA 1 //写数据    

void OLED_Init(void)

{

 GPIO_InitTypeDef  configStruct;

         /* enable the OLED GPIO clock */

        RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);

        /* configure OLED GPIO pin */

configStruct.GPIO_Pin = (GPIO_Pin_5 | GPIO_Pin_6);

       configStruct.GPIO_Mode = GPIO_Mode_Out_PP;

       configStruct.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_Init(GPIOA, &configStruct);

GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6);

       PLATFORM_DelayMS(800);

       OLED_WR_Byte(0xAE,OLED_CMD);//--display off

       OLED_WR_Byte(0x00,OLED_CMD);//---set low column address

OLED_WR_Byte(0x10,OLED_CMD);//---set high column address

OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  

OLED_WR_Byte(0xB0,OLED_CMD);//--set page address

OLED_WR_Byte(0x81,OLED_CMD); // contract control

OLED_WR_Byte(0xFF,OLED_CMD);//--128  

OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap

OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse

OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)

OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty

OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction

OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset

OLED_WR_Byte(0x00,OLED_CMD);

OLED_WR_Byte(0xD5,OLED_CMD);//set osc division

OLED_WR_Byte(0x80,OLED_CMD);

OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off

OLED_WR_Byte(0x05,OLED_CMD);

OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period

OLED_WR_Byte(0xF1,OLED_CMD);

OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion

OLED_WR_Byte(0x12,OLED_CMD);

OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh

OLED_WR_Byte(0x30,OLED_CMD);

       OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable

       OLED_WR_Byte(0x14,OLED_CMD);

OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel

}  

LED闪灯部分

uint8_t num = 3;

void GPIO_Configure(void)

{

   GPIO_InitTypeDef GPIO_InitStruct;

   RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);


   GPIO_StructInit(&GPIO_InitStruct);

   GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_11;

   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;

   GPIO_Init(GPIOA, &GPIO_InitStruct);

   GPIO_WriteBit(GPIOA, GPIO_Pin_11, Bit_SET);

}

void GPIO_LED_Toggle_Sample(void)

{

   GPIO_Configure();

   num--;

   if (num < 3)

   {

GPIO_SetBits(GPIOA, GPIO_Pin_11);

PLATFORM_DelayMS(100);

GPIO_ResetBits(GPIOA, GPIO_Pin_11);

       PLATFORM_DelayMS(100);

GPIO_SetBits(GPIOA, GPIO_Pin_11);

PLATFORM_DelayMS(100);

GPIO_ResetBits(GPIOA, GPIO_Pin_11);

       PLATFORM_DelayMS(100);

GPIO_SetBits(GPIOA, GPIO_Pin_11);

PLATFORM_DelayMS(2000);

   }

if(num == 0)

num = 3;

}

      工程编译ok后,选择“CMSIS-DAP Debugger”调试器,并添加好下载算法。一路操作下来,非常顺利。

          程序下载到开发板后,可以看到核心板上按钮旁边的LED灯会一定频率反复闪烁,犹如翱翔于空中客机上的信号指示灯,同时在OLED上显示ASCII码字符与对应的码值,效果显示如见BiliBili,网址: https://www.bilibili.com/video/BV1Ai1MYnE7a/

       实验小结一下,该板卡虽然小,但用起来的确很容易上手,而且调试方便,性能稳定,是一款完全能平替8位或16位的MCU方案 。

全部评论
暂无评论
0/144