#有奖活动# #申请原创# @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来生成驱动,自己添加的代码非常之少。这样可以让开发者可以快速的实现低层驱动,把自己的主要精力放在如何实现业务需求之上。同时可以实现不同的平台快速移植。
|