首页 > 其他分享 >STC单片机软件模拟SPI 兼容类比芯片SPI驱动

STC单片机软件模拟SPI 兼容类比芯片SPI驱动

时间:2024-01-23 17:57:14浏览次数:22  
标签:单片机 void STC uint8 SPI datasize datas define

/*
  analogysemi
  xutong 2024/1/23
*/
#ifndef __BSP_LPSPI_H
#define __BSP_LPSPI_H

#include "config.h"
#define SPI_SCLK(x)        P25=(x)
#define SPI_MOSI(x)        P23=(x)
#define SPI_MISO            P24
#define SPI_CS1(x)        P22=(x)                                                                                                                                                                                             
#define SPI_CS2(x)        P21=(x) 

void LPSPI_Init(void);
void Lpspi_Write(uint8_t datasize,uint8_t *datas);
void Lpspi_Read(uint8_t datasize,uint8_t *datas,uint8_t *Rxdata);

#endif /* __BSP_LPSPI_H */
#include "bsp_lpspi.h"
#include    "STC8xxxx.H"

void LPSPI_Init(void)
{
    //设置除了MISO为输入外,其他为输出模式
    P2M0 = 0xEF;  //设置P2.0~P2.7为推挽输出模式
    P2M1 = 0x10;
        
}

void SPI_Transmit_Data_mode1(uint8_t *TXData ,uint8_t Size)   //SCLK low  second edge
{
    uint8_t i,a=0,datas=0;
    for(a=0;a<Size;a++)
    {
        datas = TXData[a];
        for(i = 0;i < 8;i++)
        {
            SPI_SCLK(1);
            if(datas&(0x80))//data bit = 1
            {
                    SPI_MOSI(1);//MOSI SET 1
            }
            else
            {
                SPI_MOSI(0);//MOSI SET 1
            }
            datas <<=1;
            SPI_SCLK(0);
        }
    }
}
void SPI_Receive_Data_mode1( uint8_t *TXData,uint8_t *Rxdata ,uint8_t Size)   //SCLK low  second edge
{
    uint8_t i,a,datas;
    
    for(a=0;a<Size;a++)
    {
        datas = TXData[a];
        Rxdata[a]=0;
        for(i = 0;i < 8;i++)
        {
            SPI_SCLK(1);
            if(datas&(0x80))//data bit = 1
            {
                    SPI_MOSI(1);//MOSI SET 1    
            }
            else
            {
                    SPI_MOSI(0);//MOSI SET 0    
            }
            datas <<=1;
             SPI_SCLK(0);
            
            if(SPI_MISO==1)
            {
                Rxdata[a]|=(0x80 >>i);
            }
        }
    }
}

void Lpspi_Write(uint8_t datasize,uint8_t *datas)
{
  SPI_Transmit_Data_mode1(datas,datasize);
}
void Lpspi_Read(uint8_t datasize,uint8_t *datas,uint8_t *Rxdata)
{
  SPI_Receive_Data_mode1(datas,Rxdata,datasize);
}

 

标签:单片机,void,STC,uint8,SPI,datasize,datas,define
From: https://www.cnblogs.com/xuyuntong/p/17983021

相关文章

  • 单片机复习
    单片机复习一、单片机相关基本概念1、单片机概念书本:将微处理器、存储器和输入输出接口电路集成在一块集成电路芯片上,构成具有一定功能的计算机系统,因此称为单片机微型计算机,简称单片机。PPT:一片半导体硅片集成:CPU、存储器、并行I/O、串行I/O、定时器/计数器、中断系统、系统......
  • 基于51单片机的五路红外循迹小车代码
      红外循迹小车主要通过红外传感返回的信号来控制,遇到黑线,红外传感熄灭,返回1,遇到白色部分,红外传感常亮,返回0. 先定义pwm,电机和红外。unsignedcharPWMA,PWMB,PWMC,PWMD;//定义PWMsbitENA_1=P1^1;//定义电机转速sbitENB_1=P1^0;sbitENA_2=P1^2;sb......
  • STM32CubeMX教程20 SPI - W25Q128驱动
    1、准备材料开发板(正点原子stm32f407探索者开发板V2.4)STM32CubeMX软件(Version6.10.0)野火DAP仿真器keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动XCOMV2.6串口助手逻辑分析仪nanoDLA2、实验目标使用STM32CubeMX软件配置STM32F407开发板的SPI1与W25Q128芯片通信,以轮询方式读......
  • 重复spin问题
    ROS2重复spin问题报错描述:在执行回调函数时,报错terminatecalledafterthrowinganinstanceof'std::runtime_error'what():Node'/workflow_control_node'hasalreadybeenaddedtoanexecutor.[ros2run]:Aborted;原因在回调函数中又执行了rclcpp::spin监听函......
  • @RestControllerAdvice定义返回格式
    原文链接:如何优雅的写Controller层代码?一、拦截异常,封装返回值@RestControllerAdvicepublicclassControllerExceptionAdvice{@ExceptionHandler({BindException.class})publicResultVoMethodArgumentNotValidExceptionHandler(BindExceptione){/......
  • 2-STM32F103+EC800K(移远4G Cat1)远程升级篇(自建物联网平台)-STM32通过EC800K使用htt
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/myota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明前......
  • SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)
    1.漏洞介绍SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数,该调用了自定义函数validScript,该函数中用户能够控制 functionName、parameters 或 sc......
  • FastCGI访问PHP-FPM实现任意代码执行
    之前学习web的Nginx解析漏洞就看到了FastCGI协议,今天学习一下。顺便看看有什么漏洞可以复现Nginx解析漏洞Nginx接受用户的http请求后生成的cgi环境变量有一SCRIPIT_NAME和PATH_INFO比如想要请求/var/www/html/example.gif/.php那么/var/www/html/example.gif就是SCRIPT_NAME/.......
  • 电力电子仿真工具——LTSpice
    LTSPICE的是ADI旗下一款免费的SPICE类仿真软件,有的时候,可以免费使用,对工程师、学生来说就是胜过千言万语的。SPICE型仿真和PLECS有点不同,它是由器件厂家用伪代码,可以理解为一些方程函数把它家的器件或者子系统的特性描述出来,封装成库函数给器件应用者,这样对于使用者来说,就可......
  • 双脉冲仿真测试(LTspice搭建)
     1.双脉冲测试原理    很多博主已经发布了大量有关双脉冲测试的意义、双脉冲测试原理等,顾在此不在赘诉,如有需要的小伙伴可以点这里。以下重点介绍在LTspice中双脉冲电路的搭建及可能遇到的问题。2.搭建双脉冲测试               ......