搜索
bottom↓
回复: 4

STM32F407 SPI从机一直读出0xFF,请看一下原因

[复制链接]

出390入22汤圆

发表于 2021-2-6 12:01:09 | 显示全部楼层 |阅读模式
本帖最后由 liudingding 于 2021-2-6 14:58 编辑

如题,对STM32不懂,写程序就是照葫芦画瓢,稍有变化就不知所措了,现在用SPI2,不知为什,读出一直为0xFF,请帮忙看一下,谢谢
void SPI2_Init(void)
{         
        u16 tempreg=0;
        RCC->APB1ENR|=1<<14;     //SPI2时钟使能
        RCC->AHB1ENR|=1<<1;      //使能PORTB时钟     
         GPIO_Set(GPIOB,PIN12|PIN13|PIN14|PIN15,GPIO_MODE_AF, GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);        // GPIO_AF_Set(GPIOB,12,5); //SS
        GPIO_AF_Set(GPIOB,13,5); //SCK
        GPIO_AF_Set(GPIOB,14,5); //MISO
        GPIO_AF_Set(GPIOB,15,5); //MOSI

        //这里只针对SPI口初始化
        RCC->APB1RSTR|=1<<14;              //复位SPI2
        RCC->APB1RSTR&=~(1<<14);        //停止复位SPI2
        //tempreg|=1<<15;                            //双向通信
        tempreg|=0<<11;                             //8位数据格式       
        tempreg|=0<<10;                             //全双工模式       
        tempreg|=1<<9;                             //软件nss管理
        tempreg|=0<<8;                             //从机模式下NSS电平为低
        tempreg|=0<<7;                             //MSB First  
        tempreg|=1<<6;                             //SPI启动
        tempreg|=7<<3;                             //Fsck=Fpclk1/256
        tempreg|=0<<2;                             //SPI从机  
        tempreg|=1<<1;                             //空闲模式下SCK为1 CPOL=1
        tempreg|=1<<0;                                   //数据采样从第2个时间边沿开始,CPHA=1  
        SPI2->CR1=tempreg;                     //设置CR1  
        SPI2->I2SCFGR&=~(1<<11);         //选择SPI模式
  SPI2_SetSpeed(SPI_SPEED_4);             //设置为42M时钟(2为42MHz),高速模式
  SPI2_WriteByte(0xff);                          //启动传输                 
}  

u8 SPI2_ReadByte(void)
{                                          
        while((SPI2->SR&1<<0)==0);                //等待接收完一个byte  
        return SPI2->DR;                          //返回收到的数据                                    
}

出0入0汤圆

发表于 2021-2-6 13:52:42 | 显示全部楼层
很久没有用寄存器,话说读数据没CLK能读吗

出390入22汤圆

 楼主| 发表于 2021-2-6 14:54:32 | 显示全部楼层
将     GPIO_Set(GPIOB,PIN12|PIN13|PIN14,GPIO_MODE_AF, GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);        //
         GPIO_Set(GPIOB,PIN15,            GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);        //
改为
           GPIO_Set(GPIOB,PIN12|PIN13|PIN14|PIN15,GPIO_MODE_AF, GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);        //

读出全为0xFF了

出0入16汤圆

发表于 2021-2-6 15:08:49 | 显示全部楼层
CS口你都复用了不去控制,SPI都触发不了

出390入22汤圆

 楼主| 发表于 2021-2-6 17:43:03 | 显示全部楼层
线接错了,从机MOSI是输入接主机MOSI
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 20:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表