打印
[活动专区]

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

[复制链接]
1671|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 南来之风 于 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:

led_toggle.zip

2.69 MB

使用特权

评论回复
沙发
wangwu1976@| | 2023-4-13 14:05 | 只看该作者
点赞了

使用特权

评论回复
板凳
gygp| | 2023-6-6 12:41 | 只看该作者
驱动oled 不管是SPI还是IIC为啥都是模拟的

使用特权

评论回复
地板
10299823| | 2023-6-6 13:51 | 只看该作者
提升gpio模拟spi的速度               

使用特权

评论回复
5
mmbs| | 2023-6-6 13:54 | 只看该作者
SPI时钟频率最高能到多少?              

使用特权

评论回复
6
tabmone| | 2023-6-6 14:02 | 只看该作者
求一个7脚OLED的SPI驱动程序

使用特权

评论回复
7
yorkbarney| | 2023-6-6 14:16 | 只看该作者
有谁用过2.42寸SSD1309驱动的OLED屏?

使用特权

评论回复
8
houjiakai| | 2023-6-6 14:29 | 只看该作者
spi怎么添加               

使用特权

评论回复
9
modesty3jonah| | 2023-6-6 14:39 | 只看该作者
软件模拟SPI是一种在硬件上不支持SPI接口的情况下,通过软件模拟实现SPI数据传输的方式。

使用特权

评论回复
10
fengm| | 2023-6-6 14:44 | 只看该作者
这个屏幕最大的刷屏速度是多少              

使用特权

评论回复
11
mnynt121| | 2023-6-6 14:50 | 只看该作者
在编写SPI通信函数时,需要实现SPI时序的控制,例如时钟极性、相位、速度等参数的设置,并读写SPI数据。

使用特权

评论回复
12
chenci2013| | 2023-6-6 15:06 | 只看该作者
可以调通信速率吗?               

使用特权

评论回复
13
linfelix| | 2023-6-6 17:18 | 只看该作者
通过优化代码、降低SPI速度等方式来提高系统的性能和稳定性。

使用特权

评论回复
14
jkl21| | 2023-6-6 17:49 | 只看该作者
软件模拟的SPI和硬件SPI哪个速度比较快

使用特权

评论回复
15
sheflynn| | 2023-6-6 18:01 | 只看该作者
iic的屏幕比较节IO口的。              

使用特权

评论回复
16
bartonalfred| | 2023-6-8 13:59 | 只看该作者
需要注意电路连接的可靠性和噪声抗干扰能力等问题

使用特权

评论回复
17
averyleigh| | 2023-6-8 14:23 | 只看该作者
在使用SPI驱动OLED之前,需要进行OLED的初始化工作,包括清空屏幕、设置显示模式、字体等参数的选择和设置。

使用特权

评论回复
18
fengm| | 2023-6-8 15:05 | 只看该作者
使用软件模拟SPI驱动OLED时,需要考虑数据传输速度和稳定性等问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

250

帖子

2

粉丝