南来之风 发表于 2023-1-30 12:25

【AT-START-F437测评】+ 软件模拟SPI驱动OLED

本帖最后由 南来之风 于 2023-1-30 12:25 编辑

非常感谢雅特力和21ic提供的此次体验F437的机会,这是一款性能强劲的单片机。开箱照如下:

AT32F437系列超高效能微控制器,搭载32位ARM® Cortex®-M4内核,配合先进工艺与整合技术缔造业界Cortex®-M4最高主频效能288MHz的运算速度。内建的单精度浮点运算单元(FPU)、数字信号处理器(DSP)及存储器保护单元(MPU),搭配丰富的外设及灵活的时钟控制机制,能满足多种领域应用。最高可支持超大容量4032KB的闪存(Flash)和高达512KB的SRAM。

此外,这款芯片的开发生态极其完善,参考官网提供的资料可以快速上手这款板子 https://www.arterytek.com/cn/product/AT32F437.jsp#Resource。板子的主要资源如下:

本文测评的目标是:快速搭建F437开发环境,驱动OLED屏幕。

首先,屏幕选用的是手头现成的0.96 inch的oled模块,其中管脚的定义如下:GND: 接地
VCC: 电源
SCL: SPI时钟线
SDA: SPI 主出从入线(数据从F437发送到OLED)
RES: 复位线
DC: 数据/命令选择线
CS: 片选(硬件上已经置低,因此无需额外的GPIO控制)


OLED与F437硬线连接:考虑到接线方便,项目中使用了PD1,PD3,PD5,PD7和PD9连接到OLED。本文选择的连线方式如下:


相应的初始化代码如下:void oled_gpio_config(void)
{
gpio_init_type gpio_init_struct;

/* enable the gpioD clock */
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);

/* set default parameter */
gpio_default_para_init(&gpio_init_struct);

/* configure the gpio */
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type= GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_1 | GPIO_PINS_3 | GPIO_PINS_5 | GPIO_PINS_7 | GPIO_PINS_9;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOD, &gpio_init_struct);
}


之后,需要调用库函数来修改相应的拉高,拉低操作。
//-----------------OLED Pin Config----------------
/**
*      SCL: PD1
*      SDA: PD3
*      RES: PD5
*      DC:PD7
*      CS:PD9
*/
#define OLED_SCL_Clr() GPIOD->clr = GPIO_PINS_1                   //0
#define OLED_SCL_Set() GPIOD->scr = GPIO_PINS_1                        //1

#define OLED_SDA_Clr() GPIOD->clr = GPIO_PINS_3         //0
#define OLED_SDA_Set() GPIOD->scr = GPIO_PINS_3         //1

#define OLED_RES_Clr() GPIOD->clr = GPIO_PINS_5         //0
#define OLED_RES_Set() GPIOD->scr = GPIO_PINS_5         //1

#define OLED_DC_Clr()GPIOD->clr = GPIO_PINS_7      //0 pin25
#define OLED_DC_Set()GPIOD->scr = GPIO_PINS_7      //1 pin25
                     
#define OLED_CS_Clr()GPIOD->clr = GPIO_PINS_9         //0
#define OLED_CS_Set()GPIOD->scr = GPIO_PINS_9         //1
主函数代码:int main(void)
{
system_clock_config();

at32_board_init();
oled_gpio_config();
      
OLED_Init();
      
OLED_ShowString(8,16,"Hello F437!",16,1);
OLED_Refresh();
delay_ms(1000);

while(1)
{
    at32_led_toggle(LED2);
    delay_ms(1000);
    at32_led_toggle(LED3);
    delay_ms(1000);
    at32_led_toggle(LED4);
    delay_ms(1000);
}
}实物效果:


总体来说,虽然是第一次使用雅特力单片机,但是应用文档的丰富,以及代码库的完善,都完全超过了我的预期!希望雅特力能够在国内外市场取得越来越大的成功,帮助客户节约成本,满足项目需求!
附件源码基于Keil5:

wangwu1976@ 发表于 2023-4-13 14:05

点赞了

gygp 发表于 2023-6-6 12:41

驱动oled 不管是SPI还是IIC为啥都是模拟的

10299823 发表于 2023-6-6 13:51

提升gpio模拟spi的速度               

mmbs 发表于 2023-6-6 13:54

SPI时钟频率最高能到多少?            

tabmone 发表于 2023-6-6 14:02

求一个7脚OLED的SPI驱动程序

yorkbarney 发表于 2023-6-6 14:16

有谁用过2.42寸SSD1309驱动的OLED屏?

houjiakai 发表于 2023-6-6 14:29

spi怎么添加               

modesty3jonah 发表于 2023-6-6 14:39

软件模拟SPI是一种在硬件上不支持SPI接口的情况下,通过软件模拟实现SPI数据传输的方式。

fengm 发表于 2023-6-6 14:44

这个屏幕最大的刷屏速度是多少            

mnynt121 发表于 2023-6-6 14:50

在编写SPI通信函数时,需要实现SPI时序的控制,例如时钟极性、相位、速度等参数的设置,并读写SPI数据。

chenci2013 发表于 2023-6-6 15:06

可以调通信速率吗?               

linfelix 发表于 2023-6-6 17:18

通过优化代码、降低SPI速度等方式来提高系统的性能和稳定性。

jkl21 发表于 2023-6-6 17:49

软件模拟的SPI和硬件SPI哪个速度比较快

sheflynn 发表于 2023-6-6 18:01

iic的屏幕比较节IO口的。            

bartonalfred 发表于 2023-6-8 13:59

需要注意电路连接的可靠性和噪声抗干扰能力等问题

averyleigh 发表于 2023-6-8 14:23

在使用SPI驱动OLED之前,需要进行OLED的初始化工作,包括清空屏幕、设置显示模式、字体等参数的选择和设置。

fengm 发表于 2023-6-8 15:05

使用软件模拟SPI驱动OLED时,需要考虑数据传输速度和稳定性等问题。
页: [1]
查看完整版本: 【AT-START-F437测评】+ 软件模拟SPI驱动OLED