IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> SPI软件模拟 -> 正文阅读

[嵌入式]SPI软件模拟

"spi.c"

/* Includes ------------------------------------------------------------------*/
#include "drv_spi.h"

/* Private variables ---------------------------------------------------------*/
extern TIM_HandleTypeDef htim7;

/* Private user code ---------------------------------------------------------*/
/*
* 函数名称:SPI初始化
* 函数功能:将片选线和时钟线拉高
* 函数说明:无
* 输入参数:无
* 返回值  :无
*/
void SPI_Init(void)
{
	M_CS_H;
	SPI_SCK_H;
}
/*
* 函数名称:SPI发送及接收函数
* 函数功能:通过spi发送一个字节并接收一个字节
* 函数说明:由于spi是全双工,所以可以边发送边接收
* 输入参数:需要发送的一个字节数据
* 返回值  :接收到的一个字节数据
*/
uint8_t spi_send_byte(uint8_t data){
	uint16_t i = 0;
    uint8_t temp=0x00;
    for(i=8;i>0;i--){
        if(data&0x80){
            SPI_MOSI_H;//MOSI_H;//写1
        }else{
            SPI_MOSI_L;//MOSI_L;//写0
        }
        data<<=1;//高位在前
        SPI_SCK_H;//SCLK_H;//sck高
		delay_1us();
        temp<<=1;
        if(SPI_READ_MISO ==1){
            temp++;//读到1
        }
        SPI_SCK_L;//SCLK_L;//sck低
		delay_1us();
    }
    return temp;
}
/*
* 函数名称:延时一毫秒函数
* 函数功能:延时一毫秒
* 函数说明:通过计时器7延时
* 输入参数:无
* 返回值  :无
*/
void delay_1us(void)
{
	uint16_t differ;
	differ=0xffff-1-5; 

	
	HAL_TIM_Base_Start(&htim7);
	__HAL_TIM_SetCounter(&htim7,differ); 
	while(differ < 0xffff-5)
	{
		differ = __HAL_TIM_GetCounter(&htim7);
	}
	HAL_TIM_Base_Stop(&htim7);
}

"spi.h"

#ifndef __DRV_SPI_H
#define __DRV_SPI_H
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
#include "main.h"

/* Private define ------------------------------------------------------------*/
/* 引脚操作 */
#define SPI_SCK_H    	HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_SET)           /* SCK = 1 */
#define SPI_SCK_L    	HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_RESET)        	/* SCK = 0 */

#define M_CS_H   		HAL_GPIO_WritePin(NSS_GPIO_Port,NSS_Pin,GPIO_PIN_SET)           /* NSS = 1 */
#define M_CS_L    		HAL_GPIO_WritePin(NSS_GPIO_Port,NSS_Pin,GPIO_PIN_RESET)        	/* NSS = 0 */

#define SPI_MOSI_H    	HAL_GPIO_WritePin(MOSI_GPIO_Port,MOSI_Pin,GPIO_PIN_SET)         /* MOSI = 1 */
#define SPI_MOSI_L    	HAL_GPIO_WritePin(MOSI_GPIO_Port,MOSI_Pin,GPIO_PIN_RESET)      	/* MOSI = 0 */

#define SPI_READ_MISO   HAL_GPIO_ReadPin(MISO_GPIO_Port,MISO_Pin)   					/* 读MISO口线状态 */

/* Private function prototypes -----------------------------------------------*/
void SPI_Init(void);
void delay_1us(void);

#endif

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:43:26  更:2021-11-09 19:44:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:32:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码