RT-Thread Studio学习(十一)IIC

一、简介

本文将基于STM32F407ZGT芯片介绍如何在RT-Thread Studio开发环境下访问AT24C256模块。

  • 操作系统:WIN10 x64
  • 硬件电路:正点原子探索者开发板,主芯片为STM32F407ZGT6
  • 软件开发环境:STM32CubeMX v6.3.0,RT-Thread Studio v2.2.4

二、新建RT-Thread项目并使用外部时钟

详细步骤参考文档《RT-Thread Studio学习(一)使用外部时钟系统》。
在STM32CubeMX中仅仅启用了USART1串口,配置了RCC晶体振和SYS下载方式。

三、设置AT24Cxx的驱动框架

查看原理图
在这里插入图片描述
在RT-Thread Studio的RT-Thread settings中,添加软件包at24cxx,再开启软件模拟I2C

根据开发板原理图,在board.h文件中,修改相应代码

/*#define BSP_USING_I2C1*/
#define BSP_USING_I2C1
#ifdef BSP_USING_I2C1
#define BSP_I2C1_SCL_PIN    GET_PIN(D, 6)
#define BSP_I2C1_SDA_PIN    GET_PIN(D, 7)
#endif

四、驱动代码移植

打开工程目录下的packagesat24cxx-latestat24cxx.h,修改第34-36行代码:

#ifndef EE_TYPE
#define EE_TYPE     AT24C256
#endif

在这里插入图片描述
在工程目录下的applications文件夹下添加文件hw_at24cxx.hhw_at24cxx.c
hw_at24cxx.h

#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_ */

hw_at24cxx.c

#include <hw_at24cxx.h>
#include "at24cxx.h"

#define AT24CXX_ADDR (0xA0 >> 1)        //A0 A1 A2 connect  GND
#define AT24Cxx_I2C_NAME        "i2c1"  /* PWM设备名称 */

struct at24cxx_device *at24cxx_dev;

void hw_at24cxx_init(void)
{
    at24cxx_dev = at24cxx_init(AT24Cxx_I2C_NAME,AT24CXX_ADDR);
}

void hw_at24cxx_prog(void)
{
    rt_uint8_t buff[2]={55,66};
    at24cxx_write(at24cxx_dev,0x00,buff,2);
    buff[0] = 0;
    buff[1] = 0;
    rt_thread_mdelay(10);
    at24cxx_read(at24cxx_dev,0x00,buff,2);
    rt_kprintf("buff[0] = %d\n buff[1] = %d\n",buff[0],buff[1]);
}

修改main.c的代码为:

main.c

#include <rtthread.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

int main(void)
{
    int count = 1;
    LOG_D("Hello RT-Thread!");
    hw_at24cxx_init();
    while (1)
    {
        hw_at24cxx_prog();
        rt_thread_mdelay(1000);
    }
    return RT_EOK;
}

五、测试

在这里插入图片描述
在这里插入图片描述

六、总结

本文仅仅搭建了能够使用的IIC驱动框架和代码,需要更多实验内容可以灵活使用官方函数:

extern at24cxx_device_t at24cxx_init(const char *i2c_bus_name, uint8_t AddrInput);
extern rt_err_t at24cxx_read(at24cxx_device_t dev, uint32_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead);
extern rt_err_t at24cxx_write(at24cxx_device_t dev, uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite);
extern rt_err_t at24cxx_page_read(at24cxx_device_t dev, uint32_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead);
extern rt_err_t at24cxx_page_write(at24cxx_device_t dev, uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值