当前位置:网站首页>RT-Thread Studio学习(十一)IIC
RT-Thread Studio学习(十一)IIC
2022-08-04 06:50:00 【iqiaoqiao】
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
四、驱动代码移植
打开工程目录下的packages – at24cxx-latest – at24cxx.h,修改第34-36行代码:
#ifndef EE_TYPE
#define EE_TYPE AT24C256
#endif

在工程目录下的applications文件夹下添加文件hw_at24cxx.h和hw_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);
边栏推荐
猜你喜欢

简析强制缓存和协商缓存

解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。

分布式计算MapReduce | Spark实验

DropBlock: Regularization method and reproduction code for convolutional layers

Centos通过Docker搭建MySQL的PXC集群

MMDeploy部署实战系列【第四章】:onnx,tensorrt模型推理
![玩转TypeScript对象、对象作为参数进行函数传递、接口和内置对象[无敌态]](/img/23/3405b488d11a4700a9b47758214574.png)
玩转TypeScript对象、对象作为参数进行函数传递、接口和内置对象[无敌态]

curl (7) Failed connect to localhost8080; Connection refused

C语言指针

2022爱分析· 银行数字化厂商全景报告
随机推荐
matlab让我的旧手机起死回生
redis stream 实现消息队列
ContrstrainLayout的动画之ConstraintSet
MySQL内存淘汰策略
科研绘图图表类型种类繁多,本文告诉你如何选择!
最强分布式锁工具:Redisson
curl (7) Failed connect to localhost8080; Connection refused
MySQL复制表结构、表数据的方法
数据特征预处理——缺失值的查看方式及处理
Triton部署mmdeploy导出的TensorRT模型失败篇
Error ER_NOT_SUPPORTED_AUTH_MODE Client does not support authentication protocol requested by serv
海康VisionMaster与西门子Smart 200进行S7通信
MySQL - Row size too large (> 8126). Changing some columns to TEXT or BLOB
Promise.all 使用方法
一天学会JDBC06:PrepaerdStatemtnt
指定区域内随机填充圆之matlab实现
likeshop外卖点餐系统【100%开源无加密】
从零开始单相在线式不间断电源(UPS)(硬件)
【学习笔记】状压dp
Redis非关系型数据库