完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在写NANO120驱动24C02的程序中,对I2C的初始化如下:
void I2C0_Init() { //使能I2C0引脚 SYS->PA_L_MFP &= ~(SYS_PA_H_MFP_PA8_MFP_Msk | SYS_PA_H_MFP_PA9_MFP_Msk); SYS->PA_L_MFP |= (SYS_PA_H_MFP_PA9_MFP_I2C0_SCL | SYS_PA_H_MFP_PA8_MFP_I2C0_SDA); //使能I2C0时钟 CLK_EnableModuleClock(I2C0_MODULE); //使能I2C I2C0->CON |=I2C_CON_IPEN_Msk; /* Enable I2C0 interrupt */ I2C_EnableInt(I2C0); NVIC_EnableIRQ(I2C0_IRQn); DEBUGMSG("I2C0 initial over!\n"); } 然后在读写操作24C02中,对I2C的控制寄存器进行写操作,发现无法写入,以下是写入寄存器的代码: I2C_SET_CONTROL_REG(I2C0,I2C_STA); I2C_SET_CONTROL_REG(I2C0,I2C_SI); 请问如何解决?求大神! |
|
相关推荐
1个回答
|
|
nbsp; //开启I2C时钟模块
CLK_EnableModuleClock(I2C0_MODULE); //设置I2C0通信速率 I2C_Open(I2C0, 100000); //使能I2C0中断 I2C_EnableInt(I2C0); } 在写入寄存器时,你需要先发送开始信号,然后发送器件地址和写命令,再发送要写入的寄存器地址和数据。示例如下: //发送I2C起始信号 I2C_START(I2C0); //发送器件地址+写命令 I2C_SendByte(I2C0, I2C_SLAVE_ADDR << 1); //检查ACK是否正确,如果不正确则处理错误 if(I2C_GET_ACK(I2C0)) { //处理错误 } //发送寄存器地址 I2C_SendByte(I2C0, REG_ADDR); //检查ACK是否正确,如果不正确则处理错误 if(I2C_GET_ACK(I2C0)) { //处理错误 } //发送要写入的数据 I2C_SendByte(I2C0, data); //检查ACK是否正确,如果不正确则处理错误 if(I2C_GET_ACK(I2C0)) { //处理错误 } //发送I2C停止信号 I2C_STOP(I2C0); |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2951 浏览 16 评论
3455 浏览 1 评论
8984 浏览 16 评论
4045 浏览 18 评论
1094浏览 3评论
567浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
564浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2299浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1855浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 07:23 , Processed in 1.071041 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号