在线时间4069 小时
UID3441752
注册时间2017-11-21
NXP金币753018
TA的每日心情 | 开心 2024-3-26 15:16 |
---|
签到天数: 266 天 [LV.8]以坛为家I
管理员
- 积分
- 32035
- 最后登录
- 2024-4-26
|
i.MX RT1064函数库:I2C模块和SPI模块
为方便参加恩智浦大学生智能车设计竞赛的同学们,成都逐飞科技设计制作了i.MX RT1064核心板,并配套开发了相应的函数库。
本文为逐飞科技来稿,在此分享给大家,对不参加智能车竞赛的朋友也有很大的帮助作用。
点此回顾往期内容:
GPIO详解
FAST GPIO模块详解与使用示例
ADC模块和QTIMER模块
PIT模块详解与使用示例
UART模块详解与使用示例
PWM和CACHE模块的使用
各位朋友好,逐飞科技连载的“基于RT1064的智能车应用入门指导”开发分享又来投稿啦!今天分享IIC & SPI两个模块的使用,主要讲解如何通过逐飞RT1064函数库来便捷的实现使用这两个模块进行通信。感谢恩智浦的支持,感谢梁平老师的支持以及帮忙检查修改文中错误,感谢关注“逐飞科技”。接下来进入我们今天分享的主题----“IIC模块详解与使用示例”&“SPI模块详解与使用示例”:
IIC模块详解与使用示例
1. IIC功能
IIC(Inter-Integrated Circuit)主要是用于芯片之间短距离、低速的通信。IIC可以在一个主机下连接多个从机,通过不同的从机地址与不同的从机进行通信。RT1064的IIC全部是低功耗的(LPIIC)。
2. IIC库函数
以下函数均位于zf_iic.c和zf_iic.h:
iic_init函数参数
iic_write_reg函数参数
iic_read_reg函数参数
iic_read_reg_bytes函数参数
IIC使用示例
IIC基本使用
- #include "headfile.h"
-
- uint8 dat;
- uint8 test[10];
- int main(void)
- {
- DisableGlobalIRQ();
- board_init(); //务必保留,本函数用于初始化MPU 时钟 调试串口
- //初始化IIC模块1 B17为SDA B16为SCL 波特率为400K
- iic_init(IIC_1,IIC1_SDA_B17,IIC1_SCL_B16,400*1000);
-
- //使用IIC模块1 写入0x32数据到0x65地址 从机ID为0x55
- iic_write_reg(IIC_1,0x55,0x65,0x32);
-
- //使用IIC模块1 读取0x65地址的数据存放到dat 从机ID为0x55
- iic_read_reg(IIC_1,0x55,0x65,&dat);
-
- //使用IIC模块1 读取0x65开始之后的10个地址的数据存放到test数组 从机ID为0x55
- iic_read_reg_bytes(IIC_1,0x55,0x65,test,10);
-
- EnableGlobalIRQ(0);
-
- while(1)
- {
-
- }
- }
复制代码 编程要点:当需要连续读取某一段地址的数据时,建议使用iic_read_reg_bytes采用连读,避免了多次发送起始信号,使得读取速度相比单字节读取函数要快。
使用注意事项:想直接调用这一层函数需要对IIC协议有一定的了解,并且对所操作的模块寄存器分布以及ID都必须了解才能完成与外部模块通讯的功能。
SPI模块详解与使用示例
1. SPI功能
SPI(Serial Peripheral Interface)主要用于是板级之间短距离、低速的通信。相较于IIC,SPI具有更高的通信速率。SPI可以在一个主机下连接多个从机,通过将不同的片选引脚拉低与不同的从机进行通信。RT1064的SPI全部是低功耗的(LPSPI)。
2. SPI库函数
以下函数位于zf_spi.c和zf_spi.h:
spi_init函数参数
spi_mosi函数参数
SPI使用示例
SPI基本使用
- #include "headfile.h"
-
- uint8 dat[5];
- int main(void)
- {
- DisableGlobalIRQ();
- board_init(); //务必保留,本函数用于初始化MPU 时钟 调试串口
- //初始化SPI1模块 SCK为D12 MOSI为D14 MISO为D15 CS0为D13 模式1 波特率为1M
- spi_init(SPI_1, SPI1_SCK_D12, SPI1_MOSI_D14, SPI1_MISO_D15, SPI1_CS0_D13, 0, 1*1000*1000);
-
- EnableGlobalIRQ(0);
-
- //写入需要发送的数据
- dat[0] = 0x00;
- dat[1] = 0x01;
- dat[2] = 0x02;
- dat[3] = 0x03;
- dat[4] = 0x04;
-
- //开始发送数据
- spi_mosi(SPI_1,SPI1_CS0_D13,dat,dat,5,0);
-
- while(1)
- {
-
- }
- }
复制代码 编程要点1:在使用SPI与外设进行通讯时请务必查阅资料,了解清楚外设的SPI是哪种模式,然后在初始化设置模式与外设模式必须一致。否则通讯可能失败或者不正确。
编程要点2:在使用spi_mosi发送或者接收数据时,最后一个参数请务必根据外设的时序来选择合适的片选控制方式。有的外设在一次通讯期间CS必须持续为低电平。
本期逐飞科技“基于RT1064的智能车应用入门指导”之“IIC模块详解与使用示例”&“SPI模块详解与使用示例”专题分享就到这里,大家在使用库的过程中如果遇到什么问题、或发现不足及建议请及时联系“逐飞科技”:
逐飞科技__智能车③部:824575535;
AI电磁组交流群--逐飞科技:1077051054;
我们将尽快完善。感谢关注“逐飞科技”,下期再见!
文章出处:恩智浦MCU加油站
|
|