您的位置 首页 硬件

STM32F4 SPI2初始化及收发数据运用库函数

我的STM32F4Discovery上边有一个加速度传感器LIS302DL。在演示工程中,ST的工程师使用这个传感器做了个很令人羡慕的东西:解算开发板…

我的STM32F4 Discovery上边有一个加速度传感器LIS302DL。在演示工程中,ST的工程师运用这个传感器做了个很令人羡慕的东西:解算开发板的姿势。当开发板歪斜时分,处于最上边的LED点亮,其他LED不亮。一起,用MicroUSB数据线将开发板衔接电脑时,开发板就会虚拟成一个鼠标。歪斜开发板时,鼠标指针会向歪斜的方向移动。归根到底,便是牛B的ST工程师用加速度传感器完成了姿势解算。

在开发板上,加速度传感器运用了SPI方法用STM32F4芯片进行通讯。STM32F4的SPI1 作为主机,与LIS302Dl进行通讯,读取或许写入数据。我们我没有运用过STM32的SPI口,因此在板子的空余资源中找到了SPI2接口来做实验。实验是这样的:将SPI的MISO和MOSI脚相连。这样SPI发送了什么数据,就能接收到什么数据。不需要额定的器材就能实验。

引脚:将PB13、PB14、PB15三个引脚的复用功用,别离对应于SPI2SCK、SPI2MISO、SPI2MOSI。

引脚初始化:

void SPI_GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //舱位时钟

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //引脚初始化
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 GPIO_Pin_14 GPIO_Pin_15;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);

GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2); //翻开引脚的复用功用
GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);
}

SPI2功用初始化:

void SPI_Config(void)
{
SPI_GPIOConfig();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); //时钟

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //全双工形式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //作为主机运用
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //数据长度8
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //软件设置NSS功用
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2,&SPI_InitStructure);
SPI_Cmd(SPI2,ENABLE);
}

之后就可以收发数据了:

void MySPI_SendData(char da)
{
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
SPI_SendData(SPI2,da);
}

uint8_t MySPI_ReceiveData(void)
{
while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
return SPI_ReceiveData(SPI2);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/265274.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部