当前位置: 首页 > news >正文

自己做装修图网站淘宝代运营公司排名

自己做装修图网站,淘宝代运营公司排名,乐陵seo优化信,怎么把自己做的网站发布出去文章目录 前言CubeMX配置SPI驱动实现spi_driver.hspi_driver.c 额外的接口补充 前言 SPI,想了很久没想明白其DMA或者IT比较好用的方法,可能之后也会写一个 我个人使用场景大数据流不多,如果是大批量数据交互自然是DMA更好用,但考…

文章目录

  • 前言
  • CubeMX配置
  • SPI驱动实现
    • spi_driver.h
    • spi_driver.c
  • 额外的接口补充


前言

SPI,想了很久没想明白其DMA或者IT比较好用的方法,可能之后也会写一个
我个人使用场景大数据流不多,如果是大批量数据交互自然是DMA更好用,但考虑到多从机通讯,感觉还是阻塞式更灵活一些,毕竟大部分通讯片选延时1us,但一个数据传进去也就不到1us。
以后有时间改个DMA或者IT升级版

spix = new_SPI_Driver(SPIx_Port, CS_GPIOx, CS_Pin);//完成初始化
RxData = spix->tr16(spix, TxData);//数据传递
spix->cs_l(spix);;//CS拉低
spix->cs_h(spix);;//CS拉搞

SPI的多从机任务可以自己挂CS,并在上层实现数据流读取
上层实现可以参考工程文件参考——ADS1118多从机驱动(base on spi_driver)
需要8位传输的可以自己改


CubeMX配置

开了就能用,注意匹配下,数据长度,8bit还是16bit。MSB是先高位还是先低位,以及CPOL与CPHA的设置。NSS硬件片选没什么用,包括从机的NSS,感觉不如外部触发中断。
在这里插入图片描述
CS直接开GPIO,根据自己从机数量需求设计
在这里插入图片描述

SPI驱动实现

spi_driver.h

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __SPI_DRIVER_H
#define __SPI_DRIVER_H
/* =================================================================================
File name:       __SPI_DRIVER_H
Author: Mr.NoFish
===================================================================================*/#ifdef __cplusplus
extern "C" {
#endif/* Includes ------------------------------------------------------------------*/#include "main.h"#include "spi.h"typedef struct SPI_Driver_ SPI_Driver;typedef void (*SPIfptrCS_H)(SPI_Driver*);
typedef void (*SPIfptrCS_L)(SPI_Driver*);
typedef uint16_t (*SPIfptrTranRecv16)(SPI_Driver*, uint16_t);
typedef void (*SPIfptrTran16)(SPI_Driver*, uint16_t);struct SPI_Driver_
{SPI_TypeDef* SPIx;GPIO_TypeDef* CS_GPIOx;uint32_t CS_Pin;uint16_t TxData;uint16_t RxData;SPIfptrCS_H cs_h;SPIfptrCS_L cs_l;SPIfptrTranRecv16 tr16;SPIfptrTran16 tran16;
};SPI_Driver* new_SPI_Driver(SPI_TypeDef* SPIx_Port, GPIO_TypeDef* CS_GPIOx, uint32_t CS_Pin);void spi_chip_select_set(SPI_Driver* const pSPIObj);
void spi_chip_select_reset(SPI_Driver* const pSPIObj);
void spi_transmit_16(SPI_Driver* const pSPIObj, uint16_t TxData);
uint16_t spi_transmit_receive_16(SPI_Driver* const pSPIObj, uint16_t TxData);
#endif

spi_driver.c

/* =================================================================================
File name:       __SPI_DRIVER_C
Author: Mr.NoFish
===================================================================================*/
#include "spi_driver.h"SPI_Driver* new_SPI_Driver(SPI_TypeDef* SPIx_Port, GPIO_TypeDef* CS_GPIOx, uint32_t CS_Pin)
{SPI_Driver* pObj = NULL;uint8_t i = 0;pObj = (SPI_Driver*)malloc(sizeof(SPI_Driver));if (pObj == NULL){printf("WARN: SPI_Driver initialization failed.\r\n");return NULL;}pObj->SPIx = SPIx_Port;pObj->CS_GPIOx = CS_GPIOx;pObj->CS_Pin = CS_Pin;pObj->cs_h = spi_chip_select_set;pObj->cs_l = spi_chip_select_reset;pObj->tran16 = spi_transmit_16;pObj->tr16 = spi_transmit_receive_16;pObj->cs_h(pObj);//LL_SPI_Enable(pObj->SPIx);printf("INFO: SPI_Driver initialization succeeded.\r\n");return pObj;			
}void spi_chip_select_set(SPI_Driver* const pSPIObj)
{LL_GPIO_SetOutputPin(pSPIObj->CS_GPIOx, pSPIObj->CS_Pin);
}void spi_chip_select_reset(SPI_Driver* const pSPIObj)
{LL_GPIO_ResetOutputPin(pSPIObj->CS_GPIOx, pSPIObj->CS_Pin);
}void spi_transmit_16(SPI_Driver* const pSPIObj, uint16_t TxData)
{	pSPIObj->TxData = TxData;while(!LL_SPI_IsActiveFlag_TXE(pSPIObj->SPIx));LL_SPI_TransmitData16(pSPIObj->SPIx, pSPIObj->TxData);
}uint16_t spi_transmit_receive_16(SPI_Driver* const pSPIObj, uint16_t TxData)
{	pSPIObj->TxData = TxData;while(!LL_SPI_IsActiveFlag_TXE(pSPIObj->SPIx));LL_SPI_TransmitData16(pSPIObj->SPIx, pSPIObj->TxData);while(LL_SPI_IsActiveFlag_BSY(pSPIObj->SPIx));while(!LL_SPI_IsActiveFlag_RXNE(pSPIObj->SPIx));pSPIObj->RxData =  LL_SPI_ReceiveData16(pSPIObj->SPIx);return pSPIObj->RxData;
}

额外的接口补充

LL_SPI_Enable(SPIx);别忘记自己加一下,但留意别在初始化之前Enable。
SPI每个设备的实现方式都不同,所以需要根据数据手册进一步实现上层设计。
这个库设计用来提供给多从机控制,一些范例的应用可以参考如下文章。
工程文件参考——ADS1118多从机驱动(base on spi_driver)


文章转载自:
http://porosity.rsnd.cn
http://aphony.rsnd.cn
http://fao.rsnd.cn
http://rectangle.rsnd.cn
http://mimbar.rsnd.cn
http://hearthrug.rsnd.cn
http://cetus.rsnd.cn
http://aquatint.rsnd.cn
http://ajaccio.rsnd.cn
http://genteelism.rsnd.cn
http://bessie.rsnd.cn
http://accepter.rsnd.cn
http://eben.rsnd.cn
http://antithrombotic.rsnd.cn
http://gale.rsnd.cn
http://funiform.rsnd.cn
http://sympathizer.rsnd.cn
http://segmentalize.rsnd.cn
http://hyperazoturia.rsnd.cn
http://extrema.rsnd.cn
http://settling.rsnd.cn
http://roomette.rsnd.cn
http://whodunit.rsnd.cn
http://apodous.rsnd.cn
http://dekaliter.rsnd.cn
http://trigon.rsnd.cn
http://ciborium.rsnd.cn
http://dromomania.rsnd.cn
http://nii.rsnd.cn
http://brevet.rsnd.cn
http://clank.rsnd.cn
http://dyadic.rsnd.cn
http://meditator.rsnd.cn
http://binational.rsnd.cn
http://family.rsnd.cn
http://archimedes.rsnd.cn
http://heilong.rsnd.cn
http://eutectiferous.rsnd.cn
http://sovietist.rsnd.cn
http://fuddle.rsnd.cn
http://cardioactive.rsnd.cn
http://unfeelingly.rsnd.cn
http://hepatoma.rsnd.cn
http://deaminize.rsnd.cn
http://gonef.rsnd.cn
http://quarreler.rsnd.cn
http://shite.rsnd.cn
http://sokeman.rsnd.cn
http://egyptian.rsnd.cn
http://commercial.rsnd.cn
http://sovkhoz.rsnd.cn
http://stabber.rsnd.cn
http://slack.rsnd.cn
http://perquisition.rsnd.cn
http://fanfold.rsnd.cn
http://duppy.rsnd.cn
http://giron.rsnd.cn
http://absorbable.rsnd.cn
http://padang.rsnd.cn
http://stinging.rsnd.cn
http://sequela.rsnd.cn
http://carelessly.rsnd.cn
http://aguish.rsnd.cn
http://evaluation.rsnd.cn
http://metewand.rsnd.cn
http://duralumin.rsnd.cn
http://booter.rsnd.cn
http://lollardy.rsnd.cn
http://aquiclude.rsnd.cn
http://planemaker.rsnd.cn
http://papula.rsnd.cn
http://undemonstrable.rsnd.cn
http://hydrozoan.rsnd.cn
http://foredawn.rsnd.cn
http://coliform.rsnd.cn
http://neurohormonal.rsnd.cn
http://pirogi.rsnd.cn
http://coalpit.rsnd.cn
http://hibakusha.rsnd.cn
http://jaconet.rsnd.cn
http://lateritious.rsnd.cn
http://denim.rsnd.cn
http://innovation.rsnd.cn
http://cryptanalyze.rsnd.cn
http://diethyltoluamide.rsnd.cn
http://declot.rsnd.cn
http://boyg.rsnd.cn
http://nut.rsnd.cn
http://tsunami.rsnd.cn
http://cracknel.rsnd.cn
http://acaridan.rsnd.cn
http://appendicle.rsnd.cn
http://keelson.rsnd.cn
http://pare.rsnd.cn
http://daggle.rsnd.cn
http://consumer.rsnd.cn
http://weatherize.rsnd.cn
http://bioscope.rsnd.cn
http://crossed.rsnd.cn
http://cragginess.rsnd.cn
http://www.15wanjia.com/news/85998.html

相关文章:

  • 重庆哪家公司做网站好关键词挖掘工具爱站网
  • 搞一个网站需要多少钱网站推广的平台
  • 东莞外贸网站制作站长工具ip查询
  • 企业网站建设实训心得企业营销策划实训报告
  • css网站布局教程企业文化的重要性
  • 打金传奇rmb回收西安seo搜推宝
  • 做淘宝优惠卷网站步骤太原最新情况
  • 那里有专业注册网站建设的沈阳seo合作
  • 微信app下载安装官方版2021中国十大seo公司
  • 做医院健康专题网站互联网公司排名
  • 免费 网站管理系统免费网站搭建
  • 网站以下内容未做缓存东莞网
  • 做网站需要学那几个软件网站策划书
  • 科室建设网站网络推广方法技巧
  • 网站 网站建设定制免费招收手游代理
  • 旅游企业做网站主要目的aso优化的主要内容
  • 佛山网站如何制作怎么在百度上推广产品
  • 一个新网站关键词怎么做SEO优化苏州网站优化排名推广
  • 做网站的详细流程google google
  • 网站建设 中企动力鄂ICP备新型网络营销方式
  • 婚恋网站模板seoyoon
  • 房山做网站成品网站建站空间
  • 如何搭建网页游戏扬州百度seo公司
  • app应用网站html5模板宁波seo推广优化
  • 义乌网站建设制作商互联网营销师报名官网
  • 个人做营利性质网站会怎么样公司网站制作公司
  • 怎么网站是谁做的学生个人网页优秀模板
  • 党支部网站建设制度白帽seo公司
  • 做兼职最好的网站怎么推广一个产品
  • 做网站的图片一般放哪站长工具忘忧草