美文网首页
STM32 GPIO模拟SPI源码

STM32 GPIO模拟SPI源码

作者: a0f39b0b2030 | 来源:发表于2018-10-24 21:17 被阅读95次

    用GPIO模拟实现SPI通信,已在STM32平台验证,适用于各种MCU平台,废话不多说,直接上源代码:

    远程抓娃娃APP找上海捌跃网络科技有限公司

    spi.h

    #ifndef __SPI_H

    #define __SPI_H

    #include “stm32l0xx.h”

    #ifdef SPI_GLOBALS

    #define SPI_EXT

    #else

    #define SPI_EXT extern

    #endif

    #define M_CS_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET)

    #define M_CS_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET)

    #define S_CS_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)

    #define S_CS_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)

    #define SCLK_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)

    #define SCLK_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)

    #define MOSI_H HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)

    #define MOSI_L HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)

    #define MISO HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_7)

    SPI_EXT uint32_t SpiSendByte32(uint32_t data);

    SPI_EXT uint32_t SpiSendBytes32(uint32_t *buf,uint16_t len);

    SPI_EXT uint32_t SpiReadBytes32(uint32_t *buf,uint16_t len);

    #endif

    spi.c

    /Copyright ©**********

    **描 述 : STM32平台gpio模拟SPI通信实现

    **

    ********************************************************************************************************/

    #define SPI_GLOBALS

    #include “string.h”

    #include “spi.h”

    /*******************************************************************************

    函数名称: uint32_t SpiSendByte32(uint32_t data)

    函数功能: 发送一个32位字

    函数说明: gpio模拟spi

    输入参数: data 待发送字

    输出参数:

    返回值 : 接收一个32位字

    *******************************************************************************/

    uint32_t SpiSendByte32(uint32_t data)

    {

    uint8_t i = 0;

    uint32_t temp=0x00000000;

    for(i=32;i>0;i–){

    if(data&0x80000000){ //if((data&0x80000000) == 0x80000000){

    GPIOA->BSRR = GPIO_PIN_6;//MOSI_H;//写1

    }else{

    GPIOA->BRR = GPIO_PIN_6;//MOSI_L;//写0

    }

    data<<=1;//高位在前

    GPIOA->BSRR = GPIO_PIN_5;//SCLK_H;//sck高

    temp<<=1;

    if(MISO ==1){

    temp++;//读到1

    }

    GPIOA->BRR = GPIO_PIN_5;//SCLK_L;//sck低

    }

    return temp;

    }

    /*******************************************************************************

    函数名称: uint32_t SpiSendBytes32(uint32_t *buf,uint16_t len)

    函数功能: 发送多个32位字

    函数说明: gpio模拟spi

    输入参数:

    输出参数:

    返回值 :

    *******************************************************************************/

    uint32_t SpiSendBytes32(uint32_t *buf,uint16_t len)

    {

    uint16_t i;

    for(i=0;i

    SpiSendByte32(buf[i]);

    }

    return 0;

    }

    /*******************************************************************************

    函数名称: uint32_t SpiReadByte32(void)

    函数功能: 读一个32位字

    函数说明: gpio模拟spi

    输入参数:

    输出参数:

    返回值 :

    /

    uint32_t SpiReadByte32(void)

    {

    return SpiSendByte32(0);

    }

    /

    函数名称: uint8_t Spi1ReadBytes(void)

    函数功能: 读多个32位字

    函数说明: gpio模拟spi

    输入参数:

    输出参数:

    返回值 :

    *******************************************************************************/

    uint32_t SpiReadBytes32(uint32_t *buf,uint16_t len)

    {

    uint16_t i;

    for(i=0;i

    buf[i] = SpiReadByte32();

    }

    return 0;

    }

    相关文章

      网友评论

          本文标题:STM32 GPIO模拟SPI源码

          本文链接:https://www.haomeiwen.com/subject/hfcftqtx.html