#申请原创# @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)
|
在rt-thread 的晚上开发生态加持下,在RT-Thread下依托HC32F460读写BL24C256 EEPROM 器件。