打印
[AT32F405]

【AT-START-F405测评】1、RT-Thread 驱动OLED屏实现hello world

[复制链接]
2490|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2024-4-26 08:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#有奖活动# #申请原创# @21小跑堂 @21小管家

【前言】
感谢21ic、雅特力提供了这次AT-START-F405开发板测评的机会。我这次试用主要是围绕RT-Thread来开展评测话动,希望最终实现RT-Thread与AT-START-F405的深度配合,能充分展示这款开发板的综合性能。
【开发板简介】
AT-START-F405板载了AT32F405RCT7-7芯片,外设配置LED灯,按钮,两组USB type-C和Type-A的连接器,和ArduinoTM Uno R3扩展接口,和经由QSPI1扩充的16 M字节SPI闪存存储器。此开发板自带嵌入式调试/烧录工具AT-Link-EZ,不需接入额外开发工具即可对芯片调试使用。

【RT-Thread简介】
作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS 的种种优越之处。RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过 16 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。
【实验硬件】
1、AT-START-F405开发板
2、主控为ssd1306的0.96寸OLED屏
【资料准备】
在开始rtthread之前需要准备如下资料:
1、下载RT-Thread源码。下载地址为:https://github.com/RT-Thread/rt-thread
2、下载at32的keil的pack包:https://www.arterytek.com/cn/support/index.jsp?index=4
3、安装env工具(本次不提供详细安装过程)它的教程网址在:https://www.rt-thread.org/document/site/#/development-tools/env/env
【实现步骤】
1、来到bsp的at32目录中,复制一份at32f405-start的文件夹,修改为at32f405-start_oled。

2、打开源码工程,开启evn工具

3、输入menuconfig进入图形化配置界面,进入 → Hardware Drivers Config → On-chip Peripheral Drivers → Enable I2C BUS (software simulation)目录,开启i2c1

4、进入 → RT-Thread online packages → peripheral libraries and drivers → ssd1306: OLEDs based on SSD1306, SH1106, SH1107 and SSD1309 drive目录,打开ssd1306并使能sample。

5、退出设置界面,保存配置,在env命令行下执行pkgs --update:

6、执行scons --target=mkd5,重新生成一下MDK5工程:

7、在目录下面打开mdk工程:

8、在工程的分组ssd1306中,我们看到env给我们配置好了ssd1306的工程。

9、编译下载,使用串口终端使用list device查看,我们看到已经有i2c1这个设备号了:

10、连接OLED屏与开发板
PB8-----SCL  PB9-----SDA
11、打开rtconfig.h修改i2c的对应管脚:
#define BSP_I2C1_SCL_PIN  GET_PIN(B, 8)
#define BSP_I2C1_SDA_PIN  GET_PIN(B, 9)
12、打开main.c添加ssd1306.h的头文件引用,同时添加测试代码如下:
int main(void)
{
    rt_uint32_t speed = 200;
    /* set led2 pin mode to output */
    rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
    /* set led3 pin mode to output */
    rt_pin_mode(LED3_PIN, PIN_MODE_OUTPUT);
    /* set led4 pin mode to output */
    rt_pin_mode(LED4_PIN, PIN_MODE_OUTPUT);
                ssd1306_Init();
               
    while (1)
    {
                          ssd1306_Fill(Black);
                                ssd1306_UpdateScreen();
                                rt_thread_delay(1000);
                                ssd1306_SetCursor(0, 0);
                                ssd1306_WriteString("AT-START", Font_16x26, White);
                                ssd1306_UpdateScreen();
                                rt_thread_delay(1000);
                                ssd1306_SetCursor(2, 26);
                        
                                ssd1306_WriteString("AT32F405", Font_11x18, White);
                                ssd1306_UpdateScreen();
                                rt_thread_delay(1000);
                                ssd1306_SetCursor(2, 26+18);
                                ssd1306_WriteString("www.21ic.com", Font_7x10, White);
                                ssd1306_UpdateScreen();
                                rt_thread_delay(1000);
                                ssd1306_SetCursor(10, 26+18+10);
                                ssd1306_WriteString("by lugl", Font_6x8, White);
                                ssd1306_UpdateScreen();
                                rt_thread_delay(3000);
    }
}
【实现效果】

【总结】
此次使用RT-Thread来实现驱动OLED屏,全程序使用rtthread来生成驱动,自己添加的代码非常之少。这样可以让开发者可以快速的实现低层驱动,把自己的主要精力放在如何实现业务需求之上。同时可以实现不同的平台快速移植。

77929662aed094e1eb.png (279.57 KB )

77929662aed094e1eb.png

使用特权

评论回复
沙发
YangTwo| | 2024-5-13 19:56 | 只看该作者
这个字体很漂亮!

使用特权

评论回复
板凳
gangong| | 2024-10-30 20:47 | 只看该作者
写的很好了

使用特权

评论回复
地板
micoccd| | 2024-11-16 18:39 | 只看该作者
竟然还用了操作系统

使用特权

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

本版积分规则

156

主题

741

帖子

10

粉丝