• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    四、驱动代码移植

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

    #ifndef EE_TYPE
    #define EE_TYPE     AT24C256
    #endif
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在工程目录下的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_ */
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    hw_at24cxx.c

    #include 
    #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]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    修改main.c的代码为:

    main.c

    #include 
    
    #define DBG_TAG "main"
    #define DBG_LVL DBG_LOG
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    五、测试

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

    六、总结

    本文仅仅搭建了能够使用的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
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    vuex存储用户信息封装
    在神经网络引入了非线性,非线性回归 神经网络
    PostgreSQL 正则表达式匹配字段
    经典文献阅读之--SuMa++
    彩色稻高食用价值 国稻种芯-何登骥:功能农业诠释农业大健康
    SN75107BDR 总线接收器 中文资料_PDF中文资料_参数_引脚图
    解决VS Code终端中文乱码问题
    011 gtsam/examples/IMUKittiExampleGPS.cpp
    MySQL主从搭建,实现读写分离(基于docker)
    ChatGPT/GPT4科研技术与AI绘图及论文高效写作
  • 原文地址:https://blog.csdn.net/iqiaoqiao/article/details/125880997