单片机/MCU论坛
直播中

gtbestom

12年用户 247经验值
擅长:可编程逻辑 模拟技术 嵌入式技术 接口/总线/驱动 处理器/DSP 控制/MCU RF/无线
私信 关注

【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED

【开箱】

敏矽微 ME32G070 开发板使用 ME32G070RBT6 芯片

基于 ARM Cortex M0 内核,主频 72M,Flash 128K,RAM 12K

片上资源已经足够满足很多应用

美中不足的是缺少 USB,SDIO,RGB,DVP,ETH 等接口,但是 M0 系列芯片定位入门,基本都没有这些外设

这款开发板包装精致,设置也很合理

1.jpg

【板载资源介绍】

板载 用户KEYx2、USB转串口x1、WS2812全彩LED灯x8

【开发工具和环境】

支持 Keil、IAR 开发工具

使用 Keil 需要安装 pack 包,然后使用敏矽微官方提供的 Library 就可以进行开发了

官方也提供了很多示例工程供参考,觉得麻烦可以直接拷贝一个工程修改下就能开发需要的功能了

由于是 ARM 内核,可以使用 J-LINK、DAP-LINK、ST-LINK 等众多调试工具

【点灯】

官方提供了点灯例程,路径在 \led pb10,直接编译就可以使用了

硬件连接如下:

1.png

值得注意的是,跟 STM32 等芯片不同,敏矽微单片机 GPIO 配置引脚方式有很大差异,官方代码如下:

2.png

配置引脚输出:PB->DIR_b.DIR10 = 0x1;

配置引脚输入:PB->DIR_b.DIR10 = 0x0;

配置引脚取反:PB->NOT_b.NOT10 = 0x1;

配置引脚高电平:PB->SET_b.SET10 = 0x1;

配置引脚低电平:PB->CLR_b.CLR10 = 0x1;

【点亮OLED显示屏】

敏矽微 ME32G070 支持硬件 I2C,这里偷个懒,不想使用繁琐的跳线,直接在开发板上随意插入 OLED 显示屏的引脚,如下:

3.png

直接插上 OLED 显示屏即可

2.jpg

由于 PB6、PB4 不是 I2C 引脚,这里使用 IO 模拟 I2C 通信,PC10、PB8 设置为高电平和低电平输出,给 OLED 屏供电

驱动代码如下:

void OLED_SSD1306_Init(void)
{
    u8 i;
    OLED_SSD1306_IIC_Init();
    for (i=0; i<sizeof(OLED_SSD1306_CONFIG_TABLE); i++)
    {
        OLED_SSD1306_W_CMD(OLED_SSD1306_CONFIG_TABLE[i]);
    }
}
void OLED_SSD1306_CLEAR(u8 color)
{
    u8 i;
    for(i=0; i<8; i++)
    {
        OLED_SSD1306_SetXY(0, i);
        OLED_SSD1306_FillnB(color, 128);
    }
}
void OLED_SSD1306_Draw(void* buf, u8 x, u8 page, u8 w, u8 h)
{
    u8 i, *img;
    img = buf;
    for(i=0; i<(h>>3); i++)
    {
        OLED_SSD1306_SetXY(x, (u8)(page+i));
        OLED_SSD1306_WritenB(0x40, img, w);
        img+=w;
    }
}

【动态OLED显示屏】

驱动 OLED 只是应用的第一步,很多场景下,需要显示屏有不同的动态效果,例如显示动态波形,图像

这里开辟一块 10K 的缓存给 OLED 进行绘制使用,1K 也是够的,但是敏矽微 ME32G070 资源这么丰富,使劲狠狠浪费

设计一个内存分配代码来动态申请内存:
6.png

设计一个图像管理代码来管理图像信息:
7.png

设计一个画布操作代码,来绘制图形:
8.png

然后调用这些函数进行绘制:
4.png

效果视频如下:

1

回帖(2)

gtbestom

3 天前
配置引脚输入:PB->DIR_b.DIR10 = 0x0;
配置引脚推挽输出:PB->DIR_b.DIR10 = 0x1;
配置引脚开漏输出:PB->DIR_b.DIR10 = 0x1; IOCON->PB_ODE_b.PIN10 = 0x01;

配置引脚取反:PB->NOT_b.NOT10 = 0x1;
配置引脚高电平:PB->SET_b.SET10 = 0x1;
配置引脚低电平:PB->CLR_b.CLR10 = 0x1;

也可以用下面的方式:

配置引脚输入:PB->DIR &= ~(1<<10);
配置引脚推挽输出:PB->DIR |= (1<<10);
配置引脚开漏输出:PB->DIR |= (1<<10); IOCON->PB_ODE |= (1<<10);

配置引脚取反:PB->NOT = (1<<10);
配置引脚高电平:PB->SET = (1<<10);
配置引脚低电平:PB->CLR = (1<<10);
举报

gtbestom

3 天前

点亮 WS2812 级联灯

WS2812 在官方例程里是有驱动程序的,基于 PWM 的方式,WS2812 驱动起来比较简单,除了 PWM 方式,还可以用 SPI 方式,使用 IO 口模拟时序也可以。

开发板原理图如下:
5.png

使用了 8 颗 WS2812 RGB 灯珠,WS2812 驱动时序可以看下面的图片:
6.png

WS2812 使用 GRB888 的色彩方案,8 个脉冲代表一个颜色,高位在前,先发 G 再发 R 再发 B,3 色数据都发完后,第一颗灯珠就可以点亮,紧接着发第 2 颗灯珠的 GRB 数据,连续发完 8 颗后,发送一个停止信号,一个长的低电平就行,是不是很简单。

首先,初始化时钟:
SystemInit ();
PD7_INIT(PD7_OSC_IN);
PD10_INIT(PD10_OSC_OUT);
SYS_Powerup_HSE_CLK();
SYS_PLL_Config(HSE_CLK, 72000000);
SYS_SelectMainClkSrc(PLL_CLK);

其次,初始化 IO 口,设置为输出模式,低电平:
PB->DIR_b.DIR15 = 0x1; // RGB
PB->CLR_b.CLR15 = 0x1;

然后,发生色彩数据,代码如下:
7.png

这份代码以最低亮度,点亮了4个灯珠,第一个红色,第二个绿色,第三个蓝色,第四个白色,效果如下图:
3.jpg

举报

更多回帖

发帖
×
20
完善资料,
赚取积分