完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
工程师们好,我在使用PIC24单片机与ADXL362使用SPI通信时出现了读取数据错误的问题,因此想请教一下。
我在读取相应寄存器的值得时候,数据总是在最后三位或者两位出错,但是又没有错得很多,比如我写入0xFA读出来是0xF8,写入0x96读出来是0x94,包括器件ID也是读取时有几位出错,我一开始不知道是写的程序出了问题还是读的,就尝试写入了软复位0x52到软复位寄存器,结果读取出来之前写过的其他寄存器的值都被置0了,我认为可能是读取的问题,但是不知道出错在哪,我尝试调整过主机的分频比,有时候调到某个值就能正确读取,但是过一段时间相同的程序又无法正确读取,而且每次错误读取的值都是一样的,并非随机的代码,不知道有哪位能够帮助一下?以下附上SPI部分的代码,新手代码写得不好请包涵: #include #include "XL362.h" #include "xl362_io.h" unsigned char RESERED[100]; /* reseve zone for ICD2 */ #define CS_SPI _RG9 void delay(unsigned int del); unsigned char b; unsigned char a; void SPI2Init(); unsigned char WriteSPI2Buf(unsigned char k); unsigned char xl362_read(unsigned char addr); void xl362_wr(unsigned char addr,unsigned char data); void xl362_init(); int main(void) { TRISD = 0x0000; TRISF = 0x0000; init(); SPI2Init(); xl362_init(); b=xl362_read(0x00); a=xl362_read(0x01); while(1) { display(); delay(10); } } void delay(unsigned int del) { unsigned int i; while (del --) { for (i = 0; i < 890; i++); } } /*=====================SPI===================*/ void SPI2Init() { IEC2bits.SPI2IE=0; SPI2CON1 =0x033f; //CKE=1 CKP =0 主控模式 SPI2CON2 = 0; SPI2CON1bits.SPRE=0b000; //8:1 辅助 SPI2CON1bits.PPRE=0b10; //4:1 主 SPI2STAT =0x8000; //使能 TRISGbits.TRISG9 =0; CS_SPI = 1; } unsigned char WriteSPI2Buf(unsigned char k) { delay(1); SPI2BUF=k; //写入需要发送的数据 while(!SPI2STATbits.SPIRBF); //等待发送和接受完成 return SPI2BUF; //返回接收的数据 delay(1); } unsigned char xl362_read(unsigned char addr) { uchar k; delay(1); CS_SPI=0; delay(1); k=WriteSPI2Buf(XL362_REG_READ); k=WriteSPI2Buf(addr); k=WriteSPI2Buf(0xff); delay(1); CS_SPI=1; delay(1); return k; } void xl362_wr(unsigned char addr,unsigned char data) { uchar k; delay(1); CS_SPI=0; delay(1); k=WriteSPI2Buf(XL362_REG_WRITE); k=WriteSPI2Buf(addr); k=WriteSPI2Buf(data); CS_SPI=1; } void xl362_init() { // xl362_wr(0x20,0xFA); // xl362_wr(0x21,0x00); // xl362_wr(0x23,0x96); // xl362_wr(0x24,0x00); // xl362_wr(0x25,0x1E); // xl362_wr(0x27,0x3F); // xl362_wr(0x2B,0x40); // xl362_wr(0x2D,0x0A); // xl362_wr(0x1f,0x52); } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1412 浏览 1 评论
3277 浏览 1 评论
8151 浏览 0 评论
1967 浏览 0 评论
VL53L5CX #高达 8x8 多区域测距和 63°对角线宽视场 飞行时间多区域测距传感器
17362 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 03:31 , Processed in 0.409130 second(s), Total 41, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号