请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4347|回复: 1

STM32F103ZE 读写SPI问题

[复制链接]

1

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2019-10-16 11:20:32 | 显示全部楼层 |阅读模式
目前手上有开发板(STM32-PZ6806L)及一个指纹模块, 指纹模块是通过SPI进行数据传输, 通过杜邦线对应连结:SPI1_SCK->CLK、SPI1_MISO->MISO、SPI1_MOSI->MOSI、SPI1_NSS->CS、STM3.3V->3.3v、STM32_GND->GND.指纹模块的SPI信息为:SPI 从接口仅支持 CPHA=0, CPOL=0 传输模式, SPI 时钟最高频率可支持到 12MHz,时序如图, 操作部分:
写 SRAM 空间 命令 0 高地址 低地址 8bit 数据 0 8bit 数据 1 …… ……读 SRAM 空间 命令 1 高地址 低地址 Nop 8bit 数据 0 8bit 数据 1 ……
写 SFR 空间 命令 2 高地址 低地址 8bit 数据 0 …… …… ……
读 SFR 空间 命令 3 高地址 低地址 8bit 数据 0 …… …… ……
    读图像    命令 4 高地址 低地址 Nop 8bit 数据 0 …… ……
代码部分:
void SPI_GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        /* SPI1: SCK,MOSI复用输出 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* SPI1: MISO浮动输入 */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        /* SPI1: CS推挽输出 */
        GPIO_InitStructure.GPIO_Pin = PIN_SPI_CS;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(PORT_SPI_CS, &GPIO_InitStructure);
}

void SPI_Configuration(void)
{
        SPI_InitTypeDef  SPI_InitStructure;

        /* SPI 初始化定义 */
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI设置为双线双向全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                      //设置为主 SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                  //SPI发送接收 8 位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                         //时钟空闲为低
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                       //数据捕获于第二个时钟沿
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                          //软件控制 NSS 信号
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //波特率预分频值为2
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                 //数据传输从 MSB 位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;                           //定义了用于 CRC值计算的多项式
        SPI_Init(SPI1, &SPI_InitStructure);

        SPI_Cmd(SPI1, ENABLE);                                             //使能 SPI1
}

void SPI_Initializes(void)
{
        SPI_GPIO_Configuration();
        SPI_Configuration();
}

uint8_t SPI_WriteReadByte(uint8_t TxData)
{
        while((SPI1->SR & SPI_I2S_FLAG_TXE) == (uint16_t)RESET);
        SPI1->DR = TxData;

        while((SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);               
        return SPI1->DR;
}

void SPI_FLASH_BufferRead(u8* pBuffer, int16_t NumByteToRead)
{
        u8 cmd = 0x04;
        while (NumByteToRead--)
        {
                *pBuffer = SPI_WriteReadByte(cmd);
                printf("*pBuffer=%x, NumByteToRead= %d \r\n", *pBuffer, NumByteToRead);
                pBuffer++;
        }
}



目前通过调用SPI_FLASH_BufferRead, 打印出来的都是0, 麻烦帮忙看看, 谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

38

帖子

100

积分

禁止发言

积分
100
发表于 2022-1-4 11:20:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 19:04 , Processed in 0.086863 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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