你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32VCT6的SPI3通信

[复制链接]
任道游 提问时间:2018-1-12 14:56 /
void Spi_Configuration(void)
{
          SPI_InitTypeDef  SPI_InitStructure;
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //设置SPI的数据大小:SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //串行同步时钟的空闲状态为高电平或者低电平
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //数据捕获于第二个时钟沿
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;                //定义波特率预分频的值:波特率预分频值为16
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC值计算的多项式
        SPI_Init(SPI3, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
        SPI_Cmd(SPI3, ENABLE); //使能SPI外设

        SPI3_ReadWriteByte(0xff);//启动传输         
       
}

IO初始化
        RCC->APB2ENR |= 0x00000001;  //禁用JTAG,开启SWD
        AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x02000000;

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;;
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOB, &GPIO_InitStructure);         //MISO
        GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_5);  //PB3/4/5上拉

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

开启时钟
//下面是给各模块开启时钟
//启动GPIO ,AFIO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |  RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |RCC_APB2Periph_AFIO , ENABLE);
//SPI3时钟使能
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3,ENABLE);

我通过SPI与F-RAM通信只能看见发送的波形,看不到接收的波形,正常情况下主机控制时序,那么当主机发送完指令后,时钟信号在接收过程中是显示还是不显示,是只有接收到数据才有时钟信号吗?F-RAM是在上升沿读取数据的,现在就是接收不到数据,我用这几个引脚进行模拟SPI通信时可以的,发送的,正常通信的数据的时钟比不正常的慢了半个周期???

收藏 评论2 发布时间:2018-1-12 14:56

举报

2个回答
MrJiu 回答时间:2018-1-12 15:34:27
MCU作为主SPI?有波形出来,然后从机没有波形发输出来?看一下SPI的时序是否都得上从机的。。。然后就是从机是否工作等等!!!

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

七哥 回答时间:2018-1-28 13:53:49
不知道对不对啊,反正在STM32F10X的固件库中,SPI的三个IO管脚都是设置的GPIO_Mode_AF_PP模式,片选信号为GPIO_Mode_Out_PP模式。

傲游截图20180128135056.jpg

傲游截图20180128135327.jpg

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版