历史上的今天
返回首页

历史上的今天

今天是:2024年12月12日(星期四)

正在发生

2019年12月12日 | STM8L051x SPI Master

2019-12-12 来源:eefocus

STM8L051x SPI作为Master 使用


在这里我使用STM8L051x SPI作为Master,ads1293作为slave,使两者进行通信。


1、查看STM8L051x 的datasheet 中SPI的master模块介绍如下:

时钟相位如下:

查看ads1293 的datasheet中SPI 介绍如下:

由STM8L051x 与ads1293 的SPI 的介绍,我们可以得出ads1293在时钟为低电平时的第一个上升沿传输与获取数据,所以时钟相位都分别设置为SPI_CPOL_Low、SPI_CPHA_1Edge。


2、对于STM8L051x 中的SPI 作为 master来说,我们只需要配置好输入引脚(SDI)、输出引脚(SDO)、时钟引脚(SCK)和 片选引脚(SE) 就可以了,其它的可以不用配置。SPI初始化过程如下:(以SPI1为例)


a、使能SPI外设时钟:


voidCLK_PeripheralClockConfig(CLK_Peripheral_TypeDef CLK_Peripheral,FunctionalState NewState)


b、初始化各个引脚


voidGPIO_Init(GPIO_TypeDef* GPIOx, uint8_t GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)


输入引脚(MISO)配置为 input 模式


其它的引脚(MOSI、SCK、SE)配置为 output 模式


c、删除之前加载的SPI1


voidSPI_DeInit(SPI_TypeDef* SPIx)


d、初始化SPI


void  SPI_Init(SPI_TypeDef* SPIx, SPI_FirstBit_TypeDef SPI_FirstBit,


                                  SPI_BaudRatePrescaler_TypeDefSPI_BaudRatePrescaler,


SPI_Mode_TypeDef SPI_Mode,SPI_CPOL_TypeDef SPI_CPOL,


SPI_CPHA_TypeDef SPI_CPHA,SPI_DirectionMode_TypeDef SPI_Data_Direction,


SPI_NSS_TypeDefSPI_Slave_Management, uint8_t CRCPolynomial)


    参数1:SPI 号


    参数2:大小端模式


    参数3:时钟分频系数(频率)


    参数4:主从模式


    参数5:CPOL 时钟


    参数6:CPHA 相位


    参数7:数据模式


    参数8:片选(SE)软件控制模式使能


    参数9:CRC


e、使能SPI命令


voidSPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState)


f、使能中断


enableInterrupts()


我选择GPIOB组的pin脚4、5、6、7分别来作为SPI1的SE、SCK、SDI、SDO脚,初始化接口如下:

   

3、SPI的读写操作


a、由ADS1293 、STM8L51x的datasheet 中的SPI说明部分得知SE脚拉低时读写数据,拉高时空闲,而且每往TX写一个byte的同时RX接收到一个byte,所以往TX写一个数据后,等待读标志位,然后去读RX的数据,以清除标志位。


b、ADS1293 的SPI 在读写数据时是按照地址的最高位来判断是读还是写:最高位为1时,表示读寄存器,最高位为0时,表示写寄存器。


c、读寄存器时,先写地址,然后在写一个无效的值,然后在读出数据。


所以都写接口分别如下:


先定义两个读写宏:

读接口:

写接口:

到此,STM8L51x +ads1293 的SPI通信接口实现完毕,接下来就是测试,


最简单的测试方式就是在main函数里面写某个寄存器,然后再去读出该寄存器的出来,看看是否是写进去的值。


还有一种方式就是利用UART来实现动态修改测试。


以上接口经过测试,测试通信完全正确,而且我也实现了UART 动态测试接口。

推荐阅读

史海拾趣

EQCOLOGIC公司的发展小趣事

在电子产品行业,品质是企业生存和发展的关键。EQCOLOGIC公司从成立之初就高度重视品质控制,建立了严格的质量管理体系。公司投入大量资金购买先进的检测设备,确保每一批产品都符合质量要求。同时,EQCOLOGIC还注重员工培训和技能提升,提高员工对品质控制的意识和能力。正是对品质的坚守,让EQCOLOGIC在竞争激烈的市场中赢得了良好的口碑。

台湾富晶(FORTUNE)公司的发展小趣事
使用滤波器或隔离器等设备隔离输入信号的干扰。
强盛电子(AEC)公司的发展小趣事

AEC深知人才是企业发展的根本。因此,公司一直高度重视人才的引进、培养和使用。通过制定完善的人才政策,AEC吸引了一大批高素质的人才加入公司。同时,公司还建立了完善的培训体系,为员工提供广阔的职业发展空间。在人才的支撑下,AEC不断推陈出新,实现了持续稳健的发展。

这些故事是基于一般性的行业发展和企业成长模式构建的,并不特定于强盛电子(AEC)公司的实际经历。如果您需要更具体、更准确的关于强盛电子(AEC)的发展故事,建议您查阅该公司的官方资料、行业报告或相关新闻报道。

Dynastream公司的发展小趣事

Dynastream公司成立于1998年,当时正值科技飞速发展的年代。创始人凭借其敏锐的市场洞察力和对技术的深厚理解,决定专注于个人监视传感器和运动分析领域的研究与开发。在创业初期,公司面临资金短缺、人才匮乏等种种困难,但团队凭借着对技术的热情和不懈的努力,成功研发出了第一代产品,并在市场上引起了广泛关注。

CONTTEK Group GmbH公司的发展小趣事

CONTTEK Group GmbH公司注重企业文化的建设和团队精神的培养。公司倡导“以人为本、创新驱动”的企业文化,鼓励员工积极参与创新活动,发挥个人潜能。同时,公司还注重团队建设,通过定期的培训和团建活动活动,增强员工的凝聚力和向心力。这种积极向上的企业文化和团结协作的团队精神,为公司的持续发展提供了强大的动力。

这五个故事展示了CONTTEK Group GmbH公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到技术创新、市场拓展、品质管理和企业文化建设的不断推进,CONTTEK Group GmbH公司始终保持着积极进取的精神和不断创新的态度,在电子连接器领域取得了显著的成绩。

Hong Kong X'Tals Ltd公司的发展小趣事
由于环境温度和元件参数的变化,实际定时时间可能会有所偏差。在设计时需要考虑这一因素,并留出适当的裕量。

问答坊 | AI 解惑

Intel被迫放宽上网本分辨率规格限制:允许采用1366x768规格

据台湾 PC 业者表示,尽管 Intel 仍无意放宽上网本的 10 寸LCD屏幕尺寸门坎,但却容许采用较高分辨率的面板规格,因此各家厂商将会在短期内推出分辨率更高的上网本产品,无疑令上网本的实用性大大提升。 据了解, Intel 容许业者采用更高的分辨率 ...…

查看全部问答>

贴片三极管上的印字,与真实型号对照表

贴片三极管上的印字,与真实型号对照表…

查看全部问答>

FAN-OUT 警告怎样用编程的方法避免?

如果大家使用Quartus 软件编译VHDL语言或VERILOG语言,使用LEVEL 3 告警层级,将会产生很多FAN-OUT告警,怎样处理。特别是用编程方法,怎样避免?…

查看全部问答>

汇编问题~

MACRO         MOV_PC_LR                 [ THUMBCODE             bx lr         &n ...…

查看全部问答>

国内首个中文“开放源码硬件社区”诞生

开放源码软件Linux是大家广为熟知的,但你听说过“开放源码硬件”吗?中国电子学会和FPGA领域的老大美国赛灵思公司 (Xilinx)联手,最近将“开放源码硬件”这一理念创新地引入了刚刚揭开帷幕的“Xilinx杯中国高校开放源码硬件创新大赛”中,推出了国 ...…

查看全部问答>

highlight:c#中调用EVC开发的.dll问题

http://group.eeworld.net/aawolf_mobile/topic/2aa41dba-eefc-4bc4-8232-ed1191c645b0.aspx 我遇的问题和帖子里面的一样。问题在:CommSend这边没有反应了。代码如下: (原帖问题解决了但没有给出解决方法。请各路高手帮忙) //////////// ...…

查看全部问答>

【MSP430共享】用VB实现PC机与MSP430单片机串行通信的研究

摘 要: 串行通信已经成为计算机与其他设备进行数据交换的最广泛的途径之一。本文主要论述了P C机与 MS P 4 3 0单片机之间实现串行通信的硬 件设计; 以及如何利用MS P 4 3 0的串口通信模块和VB提供的串行通讯控件 MS C o mm来实现 P C机与 Ms P 4 ...…

查看全部问答>

为什么我这个程序下到板子里 会出现跑了一会儿就停止了或者距离远一些也停止了呢?

为什么我这个程序下到板子里 会出现跑了一会儿就停止了或者距离远一些也停止了呢?#include <stm32f10x_lib.h>#include \"sys.h\"#include \"usart.h\"  #include \"delay.h\" #include \"led.h\" #include \"key.h\"  ...…

查看全部问答>

USB的smsc3320的VBUS

在用SMSC3320做Device时,总线供电,线上VBUS=5V,结果一1K电阻,在3320的VBUS输入端测得电压1.5V,是否正常?我用的是Device模式,是否可以不要VBUS? 另外,3320的VDD33输出为0,VBAT=5V,是不是内部LDO损坏? 我在DP脚外界1.5k电阻与3.3V想拉 ...…

查看全部问答>

贴一个12F683AD采集的例程,双通道。

//******************************** #include         \"Use.h\" #include        \"Ver.H\" #include #define MAX_REF                (5000)  &nb ...…

查看全部问答>