打印

MISO脚读回数据有误

[复制链接]
971|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
morrisk|  楼主 | 2021-5-5 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IC16F1503的MSSP配置为SPI与芯片通信,MISO脚读回数据有误

使用特权

评论回复
沙发
zhuhuis| | 2021-5-5 15:51 | 只看该作者
详细说说

使用特权

评论回复
板凳
morrisk|  楼主 | 2021-5-5 15:53 | 只看该作者
使用PIC16F1503利用SPI口对LT8900进行读写操作。
通过示波器观察波形,现在发现:写进去的字节波形是对的,但是读回来的字节波形有对的,也有错的

使用特权

评论回复
地板
gongche| | 2021-5-5 15:55 | 只看该作者
MISO返回的数据是有误的?

使用特权

评论回复
5
morrisk|  楼主 | 2021-5-5 16:02 | 只看该作者

硬件上,SCK,MISO,MOSI和芯片是直接连接的,没加上拉或下拉电阻
问题到底出在哪呢

使用特权

评论回复
6
huanghuac| | 2021-5-5 16:04 | 只看该作者
配置看下

使用特权

评论回复
7
morrisk|  楼主 | 2021-5-5 16:06 | 只看该作者
对SPI的配置如下:
void SPI_Init(void)
{
    TRISCbits.TRISC0 = 0;   //SCK引脚设置为输出
    TRISCbits.TRISC1 = 1;   //MISO引脚设置为输入
    TRISCbits.TRISC2 = 0;   //MOSI引脚设置为输出
    TRISCbits.TRISC4 = 0;   //片选引脚设置为输出
    APFCONbits.SDOSEL = 0;  //SDO功能在引脚 RC2-
    //配置SPI的格式               //1,1,1或者0,0,0
    SSP1STAT |= (0X01 << 7);
    SSP1CON1 = 0X21;       //SPI Master mode,clock = Fosc/16 = 1Mhz,使能SPI
}

//SPI接口发送和接收数据函数
static unsigned char SPI_SendReadByte(unsigned char dat)
{
    unsigned char readbyte;
  //  SSP1CON1bits.WCOL = 0;   //清楚写冲突标志位(WCOL),允许写SSP1BUF寄存器
    PIR1bits.SSP1IF = 0;
  //  SSP1CON1bits.SSPOV = 0;
    SSP1BUF = dat;
    while(!PIR1bits.SSP1IF);
    PIR1bits.SSP1IF = 0;
    while(!SSP1STATbits.BF);
    readbyte = SSP1BUF;        //读取接收缓冲器中的数据
   // PIR1bits.SSP1IF = 0;  //清除接收完成标志位
    return readbyte;      //返回接收到的数据
}

unsigned int LT_ReadReg(unsigned char reg)
{
    unsigned char ReadValueH,ReadValueL;
    LATCbits.LATC4 = 0;           //片选引脚拉低,使能
    SPI_SendReadByte(reg+0X80);    //读取寄存器的值
    Delay_5us;
    ReadValueH = SPI_SendReadByte(0X00);
    ReadValueL = SPI_SendReadByte(0X00);
    Delay_5us;
    LATCbits.LATC4 = 1;
    return (ReadValueH << 8 + ReadValueL);  //返回读取到的寄存器值
}

使用特权

评论回复
8
wenfen| | 2021-5-5 16:08 | 只看该作者
unsigned char ReadValueH 定义成int试试?

使用特权

评论回复
9
morrisk|  楼主 | 2021-5-5 16:10 | 只看该作者
这个貌似没什么关系的吧。

使用特权

评论回复
10
jiajs| | 2021-5-5 16:12 | 只看该作者
ReadValueH char类型直接左移8位不溢出?

使用特权

评论回复
11
morrisk|  楼主 | 2021-5-5 16:15 | 只看该作者
我现在都已经改成 unsgiend int 类型了。。。没改变啊??

使用特权

评论回复
12
songqian17| | 2021-5-5 16:17 | 只看该作者
不懂

使用特权

评论回复
13
dengdc| | 2021-5-5 16:19 | 只看该作者
ReadValueH << 8  加括号  +优先级高·

使用特权

评论回复
14
chuxh| | 2021-5-5 16:26 | 只看该作者
MISO引脚弄一个上拉试试

使用特权

评论回复
15
morrisk|  楼主 | 2021-5-5 16:27 | 只看该作者
我外部已经接了一个上拉电阻,并且用I/O口模拟了SPI协议,与LT8900进行通信。通过示波器查看波形。

使用特权

评论回复
16
gongche| | 2021-5-5 16:29 | 只看该作者
你现在的情况是什么?

使用特权

评论回复
17
morrisk|  楼主 | 2021-5-5 16:31 | 只看该作者
在MOSI引脚看到的波形是正确的,但是再MISO引脚上看到的波形和我要读回来的正确波形是有出入的

使用特权

评论回复
18
stly| | 2021-5-5 16:34 | 只看该作者
MISO的输出是有你代码决定的,要查代码了

使用特权

评论回复
19
supernan| | 2021-5-5 16:36 | 只看该作者
或者你把手到的数据直接回发,看看MISO引脚输出对不对?

使用特权

评论回复
20
chenjunt| | 2021-5-5 16:38 | 只看该作者
这个什么问题,后来解决了没有?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

701

主题

6879

帖子

2

粉丝