Stm32F103 的SPI通讯,为什么一直停在while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE)==RESET); 5
#include"stm32f10x_conf.h"//#include"define.h"//#include"extern.h"//#include"AiSpi.h"...
#include "stm32f10x_conf.h"
//#include "define.h"
//#include "extern.h"
//#include "AiSpi.h"
#define ChanIn1 0x00
#define ChanIn2 0x08
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void AiSpiInit(void);
void AiSpiCalc(void);
SPI_InitTypeDef SPI_InitStructure;
void AiSpiInit(void)
{ GPIO_Configuration();
RCC_Configuration();
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // 时钟悬空时高
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // 数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_CalculateCRC(SPI2, DISABLE);
SPI_Cmd(SPI2, ENABLE);
}
extern s32 ad_an1_V0;
extern s32 ad_an2_V0;
void AiSpiCalc(void)
{
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE)==RESET); // 0:发送非空
SPI_I2S_SendData(SPI2, ChanIn1);
}
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
} 展开
//#include "define.h"
//#include "extern.h"
//#include "AiSpi.h"
#define ChanIn1 0x00
#define ChanIn2 0x08
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void AiSpiInit(void);
void AiSpiCalc(void);
SPI_InitTypeDef SPI_InitStructure;
void AiSpiInit(void)
{ GPIO_Configuration();
RCC_Configuration();
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // 时钟悬空时高
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // 数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_CalculateCRC(SPI2, DISABLE);
SPI_Cmd(SPI2, ENABLE);
}
extern s32 ad_an1_V0;
extern s32 ad_an2_V0;
void AiSpiCalc(void)
{
while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE)==RESET); // 0:发送非空
SPI_I2S_SendData(SPI2, ChanIn1);
}
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 |GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
} 展开
1个回答
2015-05-27 · 知道合伙人互联网行家
关注
展开全部
I2S是一种音频总线标准,在stm32上和spi总线是管脚复用的,具发锭篡瓜诂盖磋睡单精体的可以参考芯片手册。而库函数中凡是加了I2S的函数,都是特指的I2S。
希望我的回答对你有所帮助
如有其他问题,可以继续追问
希望我的回答对你有所帮助
如有其他问题,可以继续追问
追问
我看Stm32很多例程,还有网上很多资料都是将SPI用I2S函数发送的啊。另外库里也没有专门针对SPI的发送相关库函数。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询