历史上的今天
今天是: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 动态测试接口。
史海拾趣
|
Intel被迫放宽上网本分辨率规格限制:允许采用1366x768规格 据台湾 PC 业者表示,尽管 Intel 仍无意放宽上网本的 10 寸LCD屏幕尺寸门坎,但却容许采用较高分辨率的面板规格,因此各家厂商将会在短期内推出分辨率更高的上网本产品,无疑令上网本的实用性大大提升。 据了解, Intel 容许业者采用更高的分辨率 ...… 查看全部问答> |
|
如果大家使用Quartus 软件编译VHDL语言或VERILOG语言,使用LEVEL 3 告警层级,将会产生很多FAN-OUT告警,怎样处理。特别是用编程方法,怎样避免?… 查看全部问答> |
|
开放源码软件Linux是大家广为熟知的,但你听说过“开放源码硬件”吗?中国电子学会和FPGA领域的老大美国赛灵思公司 (Xilinx)联手,最近将“开放源码硬件”这一理念创新地引入了刚刚揭开帷幕的“Xilinx杯中国高校开放源码硬件创新大赛”中,推出了国 ...… 查看全部问答> |
|
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\"  ...… 查看全部问答> |
|
在用SMSC3320做Device时,总线供电,线上VBUS=5V,结果一1K电阻,在3320的VBUS输入端测得电压1.5V,是否正常?我用的是Device模式,是否可以不要VBUS? 另外,3320的VDD33输出为0,VBAT=5V,是不是内部LDO损坏? 我在DP脚外界1.5k电阻与3.3V想拉 ...… 查看全部问答> |
|
//******************************** #include \"Use.h\" #include \"Ver.H\" #include #define MAX_REF (5000) &nb ...… 查看全部问答> |




