我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图:
 
 1.建立新工程,选择相应的芯片型号及debug引脚及调试器
 
 2.打开cubemux,设置外部时钟及串口外设,其余设置参照前面rtthread stm32h743的使用(一)新工程建立,使能两个串口,串口1为调试串口,串口2为我们的测试串口。
 
 
 3.设置i2c引脚及参数 根据原理图scl为ph7,sda为ph8,如下图:
 

 
 4.设置系统时钟,如下图:
 
 
 5生成工程,如下图:
 
 6.生成工程后一定要关闭cubemux,如果点击close软件没有关闭,就在右上角x掉,直接关闭,否则生成的工程会有异常:
 
 
 7.编译工程,如下图,将大写的改为小写,再编译就没有报错了:
 
 
 
 8.打开工程后在工程drive文件夹下的board.h中添加要使用的串口设备和i2c设备如图,我们使用的串口1,和i2c3 如图:
 
 9.添加驱动框架和软件包:
 
 
 
 9.保存编译下,可以看到软件包已经添加到工程中了:
 
 
 10.编译无误,在软件包的.h文件中更改芯片型号:
 
 11.添加测试文件,代码如下:
 
 #include <hw_at24cxx.h>
 #include “at24cxx.h”
#define AT24CXX_ADDR (0xA0 >> 1) //A0 A1 A2 connect GND
 #define AT24Cxx_I2C_NAME “i2c3” /* PWM设备名称 */
struct at24cxx_device *at24cxx_dev;
void hw_at24cxx_init(void)
 {
 at24cxx_dev = at24cxx_init(AT24Cxx_I2C_NAME,AT24CXX_ADDR);
 }
 #define buff_size 250
 void hw_at24cxx_prog(void)
 {
 rt_uint8_t j;
 rt_uint8_t buff[buff_size]={0};
 for(j=0;j<buff_size;j++)
 {
 buff[j]=5;
 }
 at24cxx_write(at24cxx_dev,0x00,buff,buff_size);
 for(j=0;j<buff_size;j++)
 {
 buff[j]=0;
 }
 rt_thread_mdelay(10);
 at24cxx_read(at24cxx_dev,0x00,buff,buff_size);
 for(j=0;j<buff_size;j++)
 {
 rt_kprintf(“buff[%d] = %d\n”,j,buff[j]);
 }
 }
/*
- Copyright © 2006-2021, RT-Thread Development Team
- SPDX-License-Identifier: Apache-2.0
- Change Logs:
- Date Author Notes
- 2024-06-17 58381 the first version
 */
 #ifndef APPLICATIONS_HW_AT24CXX_H_
 #define APPLICATIONS_HW_AT24CXX_H_
extern void hw_at24cxx_init(void);
 extern void hw_at24cxx_prog(void);
#endif /* APPLICATIONS_HW_AT24CXX_H_ */
12.在主函数中添加初始化和调用函数,代码如下:
 #include <rtthread.h>
 #include “hw_at24cxx.h”
 #define DBG_TAG “main”
 #define DBG_LVL DBG_LOG
 #include <rtdbg.h>
int main(void)
 {
 int count = 1;
 hw_at24cxx_init();
 while (count++)
 {
 LOG_D(“Hello RT-Thread-test-eeprom!”);
 rt_thread_mdelay(1000);
 hw_at24cxx_prog();
 }
return RT_EOK;
}
 13.打开串口助手,查看打印内容:
 
 13.打开串口助手,更改写入eeprom中的值,再查看打印内容:
 
 
 可以看到写入的值与读出的值一致,eeprom的读写就可以了。