[活动专区] 【AT-START-F437测评】+ 软件模拟SPI驱动OLED

[复制链接]
2572|17
 楼主| 南来之风 发表于 2023-1-30 12:25 | 显示全部楼层 |阅读模式
本帖最后由 南来之风 于 2023-1-30 12:25 编辑

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

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

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

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

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

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

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

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

  6.   /* set default parameter */
  7.   gpio_default_para_init(&gpio_init_struct);

  8.   /* configure the gpio */
  9.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  10.   gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  11.   gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  12.   gpio_init_struct.gpio_pins = GPIO_PINS_1 | GPIO_PINS_3 | GPIO_PINS_5 | GPIO_PINS_7 | GPIO_PINS_9;
  13.   gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  14.   gpio_init(GPIOD, &gpio_init_struct);
  15. }



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

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

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

  15. #define OLED_DC_Clr()  GPIOD->clr = GPIO_PINS_7        //0 pin25
  16. #define OLED_DC_Set()  GPIOD->scr = GPIO_PINS_7        //1 pin25
  17.                      
  18. #define OLED_CS_Clr()  GPIOD->clr = GPIO_PINS_9           //0
  19. #define OLED_CS_Set()  GPIOD->scr = GPIO_PINS_9           //1

主函数代码:
  1. int main(void)
  2. {
  3.   system_clock_config();

  4.   at32_board_init();
  5.   oled_gpio_config();
  6.         
  7.   OLED_Init();
  8.         
  9.   OLED_ShowString(8,16,"Hello F437!",16,1);
  10.   OLED_Refresh();
  11.   delay_ms(1000);

  12.   while(1)
  13.   {
  14.     at32_led_toggle(LED2);
  15.     delay_ms(1000);
  16.     at32_led_toggle(LED3);
  17.     delay_ms(1000);
  18.     at32_led_toggle(LED4);
  19.     delay_ms(1000);
  20.   }
  21. }
实物效果:
2..jpg

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

led_toggle.zip

2.69 MB, 下载次数: 28

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时,需要考虑数据传输速度和稳定性等问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

293

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部