STM8L051x SPI Master

STM8L051x SPI作为Master 使用

 

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

 

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

STM8L051x SPI Master_第1张图片

 

时钟相位如下:

 STM8L051x SPI Master_第2张图片

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

 STM8L051x SPI Master_第3张图片

由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脚,初始化接口如下:

        STM8L051x SPI Master_第4张图片

 

3、SPI的读写操作

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

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

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

 

所以都写接口分别如下:

先定义两个读写宏:


读接口:

 STM8L051x SPI Master_第5张图片

写接口:

 STM8L051x SPI Master_第6张图片

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

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

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

 

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

 

        

 

你可能感兴趣的:(技术文类,软件功能调节调试实现)