发新帖本帖赏金 40.00元(功能说明)我要提问
返回列表
打印
[开发工具]

如何使用 F460 RT-Thread bsp 读写 EEPROM?

[复制链接]
1034|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创# @21小跑堂

    本文以RT-Thread官网的AN0003 RT-Thread应用笔记之I2C设备应用指南为依据,在小华 ev_hc32f460_lqfp100_v2 开发板上进行相应实验。需要准备的开发环境以及工具有:
  • IDE :Keil MDK 5.2X
  • 硬件平台 :ev_hc32f460_lqfp100_v2 开发板
  • Env tool :env_released_x_x_x
  • 调试工具 :micro usb 数据线



搭建 RT-Thread Env 环境
    由于接下来需要使用 Env tool 去构建 rt-thread 的 bsp 工程,所以首先需要搭建好相应的环境,具体步骤在此不详细描述,可以参阅笔者之前写过的一篇文章:
    https://bbs.21ic.com/icview-3253214-1-1.html


获取并构建 F460 RT-Thread BSP 示例工程
    由于小华官方已经适配好了 F460 的 RT-Thread bsp 包,用户只需要从 rt-thread GitHub 主仓(https://github.com/RT-Thread/rt-thread )获取到源码,然后进入到 bsp\hc32\ev_hc32f460_lqfp100_v2 目录中右击,选择 ConEmu Here,打开 Env 工具,在 Env 命令行中输入命令: scons --dist ,回车后等待片刻即会打包 bsp 示例工程,如下图所示:

    此时在目录下会自动生成一个dist文件夹,里面包含了工程文件夹和压缩包,此 bsp project 示例工程即可拷贝到任意目录下使用。


配置工程
    在上面得到的示例工程目录下右击,选择 ConEmu Here,打开 Env 工具。在 Env 命令行中输入 menuconfig,按 enter 键进入配置界面,使用 menuconfig 工具配置工程,主要需要添加 I2C 驱动以及 at24cxx 在线驱动包:

    按照上面选择所示即可添加好模拟 I2C 相关的配置,这里要注意,每一项配置都得先保存再按退出,另外引脚 PIN 号计算公式为 :
PIN 号 = (端口号-1)* 16 + PIN_No
   这里的端口号表示 PA/PB/PC/PD/PE 对应为 1/2/3/4/5 ,PIN_No 表示 PA05 中的 5,以 PE15 为例, PIN 号 = (5 - 1)*16 + 15 = 79 。PB05 以及其它 IO 以此类推。

    按照上面选择步骤所示即可添加好 at24cxx 在线的驱动包,这是 rt-thread 官方组件包中的资源,可以用于驱动 demo 板上的 BL24C256 EEPROM 器件。由于选择了在线资源包,需要使用命令 : pkgs --update ,作用是将对应的源文件下载到本地对应目录中。

    接下来就可以重新生成对应的 Keil 工程了,使用命令 : scons --target=mdk5 -s ,生成的工程文件为根目录下的 project.uvprojx 。
打开工程添加应用代码
    为了实现读写板载 BL24C256 EEPROM 芯片的功能,需要自己添加操作流程代码,以及修改 at24cxx.h 文件中的配置,main.c 具体如下:
/*
* Copyright (c) 2006-2022, RT-Thread Development Team
* Copyright (c) 2022, Xiaohua Semiconductor Co., Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date           Author       Notes
* 2022-04-28     CDT          first version
*/

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>

#include "at24cxx.h"

/* defined the LED_GREEN pin: PD4 */
#define LED_GREEN_PIN GET_PIN(D, 4)

at24cxx_device_t at24c256_dev;

int main(void)
{
    rt_uint8_t WriteBuff[100];
    rt_uint8_t ReadBuff[100];

    /* set LED_GREEN_PIN pin mode to output */
    rt_pin_mode(LED_GREEN_PIN, PIN_MODE_OUTPUT);

    /* at24c256 device init */
    //第一个参数需要填drv_soft_i2c.h 里配置的 i2c bus号,第二个参数需要与开发板上的地址对应起来
    at24c256_dev = at24cxx_init("i2c2", 0);//at24cxx_init("i2c2", (0xA0 >> 1));
   
    for (rt_uint8_t i = 0; i < 50; i++)
    {
        WriteBuff[i] = i + 1;
    }
    at24cxx_write(at24c256_dev, 0, WriteBuff, 50);
    rt_thread_mdelay(100);
    at24cxx_read(at24c256_dev, 0, ReadBuff, 50);
    rt_kprintf("\r\n read:");
    for (rt_uint8_t j = 0; j < 50; j++)
    {
        rt_kprintf("%d - ", ReadBuff[j]);
    }
    rt_kprintf("\r\n at24c256 test ok!");

    while (1)
    {
        rt_pin_write(LED_GREEN_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED_GREEN_PIN, PIN_LOW);
        rt_thread_mdelay(500);
    }
}
    at24cxx.h 修改如下:
#define AT24C01     0
#define AT24C02     1
#define AT24C04     2
#define AT24C08     3
#define AT24C16     4
#define AT24C32     5
#define AT24C64     6
#define AT24C128    7
#define AT24C256    8
#define AT24C512    9
#define AT24CTYPE   10   // Number of supported types

#define EE_TWR      5

#ifndef EE_TYPE
#define EE_TYPE     AT24C256
#endif

测试验证
    编译代码并下载成功后,飞线将 PE06/PB09 连接到板载 CMSIS-Dap 端的 RX/TX 即可使用调试器枚举出的虚拟串口,开启串口工具以及抓取 PB05/PE15 对应的模拟 I2C 波形,正常会显示如下:



   
    这里在放个官方的 AN ,指导我们更加熟悉 rt-thread bsp 的使用。


AN_HC32F4A0系列的RT_Thread BSP制作和移植.zip (1.15 MB)

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 40.00 元 2023-08-15
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
21小跑堂 2023-8-15 10:48 回复TA
在rt-thread 的晚上开发生态加持下,在RT-Thread下依托HC32F460读写BL24C256 EEPROM 器件。 
沙发
yangxiaor520| | 2023-8-9 19:11 | 只看该作者
RTTread操作系统现在应用挺广泛

使用特权

评论回复
板凳
jlyuan| | 2023-8-15 21:03 | 只看该作者
这么容易就40大洋了

使用特权

评论回复
地板
yang377156216|  楼主 | 2023-8-21 11:30 | 只看该作者
jlyuan 发表于 2023-8-15 21:03
这么容易就40大洋了

是呀,行动起来吧

使用特权

评论回复
发新帖 本帖赏金 40.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

204

帖子

10

粉丝