美文网首页
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源码

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

  • 14-Linux gpio模拟spi

    1.config配置 首先是spidev,要在/dev/下面产生设备文件,需要spidev的支持 使用的是gpio...

  • STM32F10x之GPIO

    1 GPIO概述 1.1 功能描述 STM32的GPIO端口相对比较复杂,所以使用起来也困难许多,STM32的GP...

  • stm32 gpio模拟uart通信

    记 最近在做TI cc2640的项目,需要用gpio模拟串口通信, 没有头绪,第一次做关于外设的开发,以前一直做上...

  • STM32的GPIO内部结构及相关寄存器

    1. GPIO简介 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接...

  • STM32-SPI的理解

    STM32在芯片内部已经集成了SPI接口,用户只需配置SPI并复用映射到相应的IO口就行。 一、SPI的特点: ...

  • GPIO 模拟Uart 通信 (soft uart/serial

    GPIO 模拟Uart 通信 (soft uart/serial) 在Uart不够用的时候可以通过GPIO 来模拟...

  • 1. 控制 LED - GPIO OUTPUT

    资源推荐:STM32 Tutorial 01 - GPIO Operations using HAL 在 STM3...

  • 12/12

    今天学习了gpio和stm32的点亮小灯程序,关于stm32的板子芯片内部,了解了一些

  • MII 接口解析(三)GPIO 模拟 MDIO 接口使用代码

    GPIO 模拟 MDIO 接口使用代码如果要通过GPIO来模拟MDIO通信,那么我们就是通过模拟其帧格式的时序来通...

网友评论

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

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