我们要在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的读写就可以了。