| 
 
初级会员 
 
	积分77金钱77 注册时间2023-3-20在线时间26 小时 | 
 
10金钱 
| 我看源代码设置的是时钟线空闲高,第二个边沿采样 SPI.H文件
 #ifndef __SPI_H
 #define __SPI_H
 #include "sys.h"
 
 
 /**********************************************************************/
 //SPI时钟  PB13
 #define SPI_SCK_H   GPIO_SetBits(GPIOA, GPIO_Pin_5);
 #define SPI_SCK_L   GPIO_ResetBits(GPIOA, GPIO_Pin_5);
 /**********************************************************************/
 //SPI  MOSI  PB15
 #define SPI_MOSI_H    GPIO_SetBits(GPIOA, GPIO_Pin_7);
 #define SPI_MOSI_L    GPIO_ResetBits(GPIOA, GPIO_Pin_7);
 /**********************************************************************/
 //SPI  MISO PB14
 #define SPI_MISO_READ  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)
 
 
 void SPI1_Init(void);                         //初始化SPI口
 //void SPI1_SetSpeed(u8 SpeedSet); //设置SPI速度
 u8 SPI1_ReadWriteByte(u8 TxData);//SPI总线读写一个字节
 
 #endif
 
 
 
 SPI.C文件
 #include "spi.h"
 #include "delay.h"
 //////////////////////////////////////////////////////////////////////////////////
 //本程序只供学习使用,未经作者许可,不得用于其它任何用途
 //Mini STM32开发板
 //SPI 驱动函数
 //正点原子@ALIENTEK
 //技术论坛:www.openedv.com
 //修改日期:2010/6/13
 //版本:V1.0
 //版权所有,盗版必究。
 //Copyright(C) 正点原子 2009-2019
 //All rights reserved
 //////////////////////////////////////////////////////////////////////////////////
 
 
 //以下是SPI模块的初始化代码,配置成主机模式,访问SD Card/W25X16/24L01/JF24C
 //SPI口初始化
 //这里针是对SPI1的初始化
 
 SPI_InitTypeDef  SPI_InitStructure;
 
 void SPI1_Init(void)
 {
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;        //推挽输出
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init( GPIOA, &GPIO_InitStructure);
 
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;        //上拉输入
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init( GPIOA, &GPIO_InitStructure);
 }
 u8 SPI1_ReadWriteByte(u8 TxData)
 {
 u8 i=0;
 u8 RxData=0x00;
 for (i=0;i<8;i++)
 {
 if(TxData&0x80==0x80)
 {
 SPI_MOSI_H;
 }
 else
 {
 SPI_MOSI_L;
 }
 TxData=TxData<<1;
 RxData=RxData<<1;
 delay_us(2);
 SPI_SCK_L;
 delay_us(2);
 if(SPI_MISO_READ==1)
 {
 RxData=RxData+1;
 }
 SPI_SCK_H;
 }
 return  (RxData);
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
 |